diff --git a/pkg/README.md b/pkg/README.md
new file mode 100644
index 0000000..474a204
--- /dev/null
+++ b/pkg/README.md
@@ -0,0 +1,43 @@
+# Package validation
+
+The packages in `pkg/` are automatically validated on the LUCI CI bots. The
+validation is largely done by the `tools/package_deps` package; it can be tested
+locally via:
+
+```
+dart tools/package_deps/bin/package_deps.dart
+```
+
+## Packages which are published
+
+There are several packages developed in `pkg/` which are published to pub.
+Validation of these packages is particularly important because the pub tools are
+not used for these packages during development; we get our dependency versions
+from the DEPS file. Its very easy for the dependencies specified in a package's
+pubspec file to get out of date wrt the packages and versions actually used.
+
+In order to better ensure we're publishing correct packages, we validate some
+properties of the pubspec files on our CI system. These validations include:
+
+- that the dependencies listed in the pubspec are used in the package
+- that all the packages used by the source are listed in the pubspec
+- that we don't use relative path deps to pkg/ or third_party/ packages
+
+## Packages which are not published
+
+For packages in pkg/ which we do not intend to be published, we put the
+following comment in the pubspec.yaml file:
+
+```
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+```
+
+These pubspecs are still validated by the package validation tool. The contents
+are more informational as the pubspecs for these packages are not consumed by
+the pub tool or ecosystem.
+
+We validate:
+- that the dependencies listed in the pubspec are used in the package
+- that all the packages used by the source are listed in the pubspec
+- that a reference to a pkg/ package is done via a relative path dependency
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 9a94f7d..ef86eeb 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -8,8 +8,10 @@
 dependencies:
   _fe_analyzer_shared:
     path: ../_fe_analyzer_shared
-  analyzer: any
-  analyzer_plugin: any
+  analyzer:
+    path: ../analyzer
+  analyzer_plugin:
+    path: ../analyzer_plugin
   args: any
   cli_util: any
   collection: any
@@ -19,7 +21,8 @@
   html: any
   intl: any
   linter: any
-  meta: any
+  meta:
+    path: ../meta
   stream_channel: any
   telemetry:
     path: ../telemetry
@@ -29,7 +32,8 @@
   yaml: any
 
 dev_dependencies:
-  analyzer_utilities: any
+  analyzer_utilities:
+    path: ../analyzer_utilities
   http: any
   logging: any
   matcher: any
diff --git a/pkg/analyzer_cli/pubspec.yaml b/pkg/analyzer_cli/pubspec.yaml
index a1980aa..da7989b 100644
--- a/pkg/analyzer_cli/pubspec.yaml
+++ b/pkg/analyzer_cli/pubspec.yaml
@@ -8,13 +8,15 @@
   sdk: "^2.7.0"
 
 dependencies:
-  analyzer: any
+  analyzer:
+    path: ../analyzer
   args: '>=0.13.0 <2.0.0'
   bazel_worker: ^0.1.0
   collection: ^1.14.1
   convert: any
   linter: ^0.1.16
-  meta: any
+  meta:
+    path: ../meta
   path: any
   pub_semver: ^1.4.2
   yaml: any
@@ -24,7 +26,3 @@
   protobuf: ^0.13.0
   test_reflective_loader: ^0.1.8
   test: ^1.0.0
-
-dependency_overrides:
-  analyzer:
-    path: ../analyzer
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 6970a80..04ab568 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -642,11 +642,7 @@
   Future<void> test_IfStatement_droppedToken() async {
     // Comment  ClassDeclaration  CompilationUnit
     await createTarget('main() { if (v i^) }');
-    if (usingFastaParser) {
-      assertTarget(')', 'if (v) ;', droppedToken: 'i');
-    } else {
-      assertTarget('i;', 'if (v) i;');
-    }
+    assertTarget(')', 'if (v) ;', droppedToken: 'i');
   }
 
   Future<void> test_InstanceCreationExpression_identifier() async {
@@ -908,8 +904,6 @@
   CompletionTarget target;
   FindElement findElement;
 
-  bool get usingFastaParser => analyzer.Parser.useFasta;
-
   void assertTarget(
     String entityText,
     String nodeText, {
diff --git a/pkg/analyzer_utilities/pubspec.yaml b/pkg/analyzer_utilities/pubspec.yaml
index ed67a42..7142157 100644
--- a/pkg/analyzer_utilities/pubspec.yaml
+++ b/pkg/analyzer_utilities/pubspec.yaml
@@ -6,7 +6,8 @@
   sdk: '>=2.1.0 <3.0.0'
 
 dependencies:
-  analyzer: any
+  analyzer:
+    path: ../analyzer
   html: any
   path: any
   test: any
diff --git a/pkg/build_integration/pubspec.yaml b/pkg/build_integration/pubspec.yaml
index b741a4b..a7b79b1 100644
--- a/pkg/build_integration/pubspec.yaml
+++ b/pkg/build_integration/pubspec.yaml
@@ -9,11 +9,8 @@
   sdk: '>=2.1.0 <3.0.0'
 
 dependencies:
-  front_end: any
+  front_end:
+    path: ../front_end
 
 dev_dependencies:
   test: any
-
-dependency_overrides:
-  front_end:
-    path: ../front_end
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index 6a7ec65..8a61bf9 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -13,8 +13,10 @@
   collection: any
   crypto: any
   dart2js_info: any
-  front_end: any
-  kernel: any
+  front_end:
+    path: ../front_end
+  kernel:
+    path: ../kernel
 
   # Unpublished packages that can be used via path dependency
   _fe_analyzer_shared:
@@ -30,7 +32,8 @@
   # Published packages - repo version ensured via dependency_overrides
   args: any
   http: any
-  js: any
+  js:
+    path: ../js
   package_config: any
   path: any
   source_maps: any
@@ -54,7 +57,7 @@
   front_end:
     path: ../front_end
   kernel:
-    path: ../../pkg/kernel
+    path: ../kernel
   meta:
     path: ../meta
 
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 507f8cb..55984a9 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -24,6 +24,14 @@
   /// message. The width left for the severity label plus the separator width.
   static const int _bodyIndentWidth = _severityWidth + 3;
 
+  static final int _pipeCodeUnit = '|'.codeUnitAt(0);
+
+  static final int _slashCodeUnit = '\\'.codeUnitAt(0);
+
+  static final int _newline = '\n'.codeUnitAt(0);
+
+  static final int _return = '\r'.codeUnitAt(0);
+
   AnalyzeCommand({bool verbose = false})
       : super(cmdName, "Analyze the project's Dart code.") {
     argParser
@@ -54,7 +62,6 @@
 
   @override
   String get invocation => '${super.invocation} [<directory>]';
-
   @override
   FutureOr<int> run() async {
     if (argResults.rest.length > 1) {
@@ -176,15 +183,17 @@
         '(${error.code})',
       );
 
+      var padding = ' ' * _bodyIndentWidth;
       if (verbose) {
-        var padding = ' ' * _bodyIndentWidth;
         for (var message in error.contextMessages) {
           log.stdout('$padding${message.message} '
               'at ${message.filePath}:${message.line}:${message.column}');
         }
-        if (error.correction != null) {
-          log.stdout('$padding${error.correction}');
-        }
+      }
+      if (error.correction != null) {
+        log.stdout('$padding${error.correction}');
+      }
+      if (verbose) {
         if (error.url != null) {
           log.stdout('$padding${error.url}');
         }
@@ -213,11 +222,6 @@
     }
   }
 
-  static final int _pipeCodeUnit = '|'.codeUnitAt(0);
-  static final int _slashCodeUnit = '\\'.codeUnitAt(0);
-  static final int _newline = '\n'.codeUnitAt(0);
-  static final int _return = '\r'.codeUnitAt(0);
-
   static String _escapeForMachineMode(String input) {
     var result = StringBuffer();
     for (var c in input.codeUnits) {
diff --git a/pkg/dartdev/pubspec.yaml b/pkg/dartdev/pubspec.yaml
index ecf8aed..d6347db 100644
--- a/pkg/dartdev/pubspec.yaml
+++ b/pkg/dartdev/pubspec.yaml
@@ -16,7 +16,8 @@
     path: ../dart2native
   dart_style: any
   intl: any
-  meta: any
+  meta:
+    path: ../meta
   nnbd_migration:
     path: ../nnbd_migration
   path: ^1.0.0
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index 73cdcc9..155491d 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -19,7 +19,8 @@
     path: ../front_end
   kernel:
     path: ../kernel
-  meta: any
+  meta:
+    path: ../meta
   path: any
   source_maps: any
   source_span: any
@@ -27,10 +28,12 @@
     path: ../vm
 
 dev_dependencies:
-  analyzer: any
+  analyzer:
+    path: ../analyzer
   expect:
     path: ../expect
-  js: any
+  js:
+    path: ../js
   modular_test:
     path: ../modular_test
   package_config: any
diff --git a/pkg/expect/pubspec.yaml b/pkg/expect/pubspec.yaml
index b1b5bd1..6a8f0bc 100644
--- a/pkg/expect/pubspec.yaml
+++ b/pkg/expect/pubspec.yaml
@@ -12,4 +12,5 @@
   sdk: '>=2.0.0'
 
 dependencies:
-  meta: any
+  meta:
+    path: ../meta
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index b1fcbcb..1478cf0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -521,10 +521,11 @@
       ProcedureKind.Getter,
       new FunctionNode(null, returnType: type),
       isAbstract: true,
-      isMemberSignature: true,
       fileUri: fileUri,
-      memberSignatureOrigin: member.memberSignatureOrigin ?? member,
       reference: referenceFrom?.reference,
+      isSynthetic: true,
+      stubKind: ProcedureStubKind.MemberSignature,
+      stubTarget: member.memberSignatureOrigin ?? member,
     )
       ..startFileOffset = startFileOffset
       ..fileOffset = fileOffset
@@ -562,20 +563,22 @@
       fileOffset = startFileOffset = enclosingClass.fileOffset;
     }
     return new Procedure(
-        member.name,
-        ProcedureKind.Setter,
-        new FunctionNode(null,
-            returnType: const VoidType(),
-            positionalParameters: [
-              new VariableDeclaration(parameterName ?? 'value',
-                  type: type, isCovariant: isCovariant)
-                ..isGenericCovariantImpl = isGenericCovariantImpl
-            ]),
-        isAbstract: true,
-        isMemberSignature: true,
-        fileUri: fileUri,
-        memberSignatureOrigin: member.memberSignatureOrigin ?? member,
-        reference: referenceFrom?.reference)
+      member.name,
+      ProcedureKind.Setter,
+      new FunctionNode(null,
+          returnType: const VoidType(),
+          positionalParameters: [
+            new VariableDeclaration(parameterName ?? 'value',
+                type: type, isCovariant: isCovariant)
+              ..isGenericCovariantImpl = isGenericCovariantImpl
+          ]),
+      isAbstract: true,
+      fileUri: fileUri,
+      reference: referenceFrom?.reference,
+      isSynthetic: true,
+      stubKind: ProcedureStubKind.MemberSignature,
+      stubTarget: member.memberSignatureOrigin ?? member,
+    )
       ..startFileOffset = startFileOffset
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = containsNnbdTypes
@@ -642,19 +645,21 @@
       }
     }
     return new Procedure(
-        procedure.name,
-        procedure.kind,
-        new FunctionNode(null,
-            typeParameters: functionType.typeParameters,
-            returnType: functionType.returnType,
-            positionalParameters: positionalParameters,
-            namedParameters: namedParameters,
-            requiredParameterCount: function.requiredParameterCount),
-        isAbstract: true,
-        isMemberSignature: true,
-        fileUri: fileUri,
-        memberSignatureOrigin: procedure.memberSignatureOrigin ?? procedure,
-        reference: referenceFrom?.reference)
+      procedure.name,
+      procedure.kind,
+      new FunctionNode(null,
+          typeParameters: functionType.typeParameters,
+          returnType: functionType.returnType,
+          positionalParameters: positionalParameters,
+          namedParameters: namedParameters,
+          requiredParameterCount: function.requiredParameterCount),
+      isAbstract: true,
+      fileUri: fileUri,
+      reference: referenceFrom?.reference,
+      isSynthetic: true,
+      stubKind: ProcedureStubKind.MemberSignature,
+      stubTarget: procedure.memberSignatureOrigin ?? procedure,
+    )
       ..startFileOffset = startFileOffset
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = containsNnbdTypes
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 0b4a166..9ee07dd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -14,6 +14,7 @@
         NamedExpression,
         Procedure,
         ProcedureKind,
+        ProcedureStubKind,
         ReturnStatement,
         SuperMethodInvocation,
         SuperPropertyGet,
@@ -94,10 +95,8 @@
           finalTarget =
               interfaceMember.memberSignatureOrigin ?? interfaceMember;
         }
-        stub.isMemberSignature = false;
-        stub.memberSignatureOrigin = null;
-        stub.isForwardingStub = true;
-        stub.forwardingStubInterfaceTarget = finalTarget;
+        stub.stubKind = ProcedureStubKind.ForwardingStub;
+        stub.stubTarget = finalTarget;
         if (_combinedMemberSignature.needsSuperImpl) {
           _createForwardingImplIfNeeded(
               stub.function, stub.name, classBuilder.cls);
@@ -140,13 +139,6 @@
       superTarget = superTarget.memberSignatureOrigin ?? superTarget;
     }
     procedure.isAbstract = false;
-    if (!procedure.isForwardingStub) {
-      // This procedure exists abstractly in the source code; we need to make it
-      // concrete and give it a body that is a forwarding stub.  This situation
-      // is called a "forwarding semi-stub".
-      procedure.isForwardingStub = true;
-      procedure.isForwardingSemiStub = true;
-    }
     List<Expression> positionalArguments = function.positionalParameters
         .map<Expression>((parameter) => new VariableGet(parameter))
         .toList();
@@ -186,6 +178,7 @@
     }
     function.body = new ReturnStatement(superCall)..parent = function;
     procedure.transformerFlags |= TransformerFlag.superCalls;
-    procedure.forwardingStubSuperTarget = superTarget;
+    procedure.stubKind = ProcedureStubKind.ForwardingSuperStub;
+    procedure.stubTarget = superTarget;
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 31186d8..8536d8c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -828,13 +828,8 @@
     procedure.function.dartAsyncMarker = AsyncMarker.Sync;
 
     procedure.isAbstract = false;
-    procedure.isNoSuchMethodForwarder = true;
-    procedure.isMemberSignature = false;
-    procedure.isForwardingStub = false;
-    procedure.isForwardingSemiStub = false;
-    procedure.memberSignatureOrigin = null;
-    procedure.forwardingStubInterfaceTarget = null;
-    procedure.forwardingStubSuperTarget = null;
+    procedure.stubKind = ProcedureStubKind.NoSuchMethodForwarder;
+    procedure.stubTarget = null;
   }
 
   void _addRedirectingConstructor(ProcedureBuilder constructorBuilder,
diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml
index 77ae47b..20a36d8 100644
--- a/pkg/front_end/pubspec.yaml
+++ b/pkg/front_end/pubspec.yaml
@@ -9,12 +9,16 @@
   sdk: '>=2.6.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: any
-  kernel: any
-  package_config: any
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  kernel:
+    path: ../kernel
+  package_config:
+    path: ../../third_party/pkg_tested/package_config
 
 dev_dependencies:
-  analyzer: any
+  analyzer:
+    path: ../analyzer
   args: '>=0.13.0 <2.0.0'
   async_helper:
     path: ../async_helper
@@ -39,13 +43,3 @@
     path: ../vm_service
   web_socket_channel: ^1.0.4
   yaml: any
-
-dependency_overrides:
-  _fe_analyzer_shared:
-    path: ../_fe_analyzer_shared/
-  analyzer:
-    path: ../analyzer
-  kernel:
-    path: ../kernel/
-  package_config:
-    path: ../../third_party/pkg_tested/package_config/
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 71006e6..6c4e50f 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -833,6 +833,7 @@
 pragma
 pre
 prebuilt
+preexisted
 preexisting
 preorder
 prev
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index d2d2c47..99a36f4 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 50;
+  UInt32 formatVersion = 51;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -396,6 +396,18 @@
 }
 */
 
+/*
+enum ProcedureStubKind {
+  Regular,
+  ForwardingStub,
+  ForwardingSuperStub,
+  NoSuchMethodForwarder,
+  MemberSignature,
+  MixinStub,
+  MixinSuperStub,
+}
+*/
+
 type Procedure extends Member {
   Byte tag = 6;
   CanonicalNameReference canonicalName;
@@ -405,16 +417,13 @@
   FileOffset fileOffset; // Offset of the procedure name.
   FileOffset fileEndOffset;
   Byte kind; // Index into the ProcedureKind enum above.
-  UInt flags (isStatic, isAbstract, isExternal, isConst, isForwardingStub,
-              isForwardingSemiStub, isRedirectingFactoryConstructor,
-              isNoSuchMethodForwarder, isExtensionMember, isMemberSignature,
+  Byte stubKind; // Index into the ProcedureStubKind enum above.
+  UInt flags (isStatic, isAbstract, isExternal, isConst,
+              isRedirectingFactoryConstructor, isExtensionMember,
               isNonNullableByDefault);
   Name name;
   List<Expression> annotations;
-  // Only present if the 'isForwardingStub' flag is set.
-  MemberReference forwardingStubSuperTarget; // May be NullReference.
-  MemberReference forwardingStubInterfaceTarget; // May be NullReference.
-  MemberReference memberSignatureOrigin; // May be NullReference.
+  MemberReference stubTarget; // May be NullReference.
   // Can only be absent if abstract, but tag is there anyway.
   Option<FunctionNode> function;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 2ba1722..d91a3d1 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -2141,6 +2141,189 @@
   }
 }
 
+/// Enum for the semantics of the `Procedure.stubTarget` property.
+enum ProcedureStubKind {
+  /// A regular procedure declared in source code.
+  ///
+  /// The stub target is `null`.
+  Regular,
+
+  /// An abstract procedure inserted to add `isCovariant` and
+  /// `isGenericCovariantImpl` to parameters for a set of overridden members.
+  ///
+  /// The stub is inserted when not all of the overridden members agree on
+  /// the covariance flags. For instance:
+  ///
+  ///     class A<T> {
+  ///        void method1(num o) {}
+  ///        void method2(T o) {}
+  ///     }
+  ///     class B {
+  ///        void method1(covariant int o) {}
+  ///        void method2(int o) {}
+  ///     }
+  ///     class C implements A<int>, B {
+  ///        // Forwarding stub needed because the parameter is covariant in
+  ///        // `B.method1` but not in `A.method1`.
+  ///        void method1(covariant num o);
+  ///        // Forwarding stub needed because the parameter is a generic
+  ///        // covariant impl in `A.method2` but not in `B.method2`.
+  ///        void method2(/*generic-covariant-impl*/ int o);
+  ///     }
+  ///
+  /// The stub target is one of the overridden members.
+  ForwardingStub,
+
+  /// A concrete procedure inserted to add `isCovariant` and
+  /// `isGenericCovariantImpl` checks to parameters before calling the
+  /// overridden member in the superclass.
+  ///
+  /// The stub is inserted when not all of the overridden members agree on
+  /// the covariance flags and the overridden super class member does not
+  /// have the same covariance flags. For instance:
+  ///
+  ///     class A<T> {
+  ///        void method1(num o) {}
+  ///        void method2(T o) {}
+  ///     }
+  ///     class B {
+  ///        void method1(covariant int o) {}
+  ///        void method2(int o) {}
+  ///     }
+  ///     class C extends A<int> implements B {
+  ///        // Forwarding stub needed because the parameter is covariant in
+  ///        // `B.method1` but not in `A.method1`.
+  ///        void method1(covariant num o) => super.method1(o);
+  ///        // No need for a super stub for `A.method2` because it has the
+  ///        // right covariance flags already.
+  ///     }
+  ///
+  /// The stub target is the called superclass member.
+  ForwardingSuperStub,
+
+  /// A concrete procedure inserted to forward calls to `noSuchMethod` for
+  /// an inherited member that it does not implement.
+  ///
+  /// The stub is inserted when a class implements private members of another
+  /// library or declares/inherits a user-defined `noSuchMethod` method. For
+  /// instance:
+  ///
+  ///     // lib1:
+  ///     class A {
+  ///       void _privateMethod() {}
+  ///     }
+  ///     // lib2:
+  ///     class B implements A {
+  ///       // Forwarding stub inserted to forward calls to `A._privateMethod`.
+  ///       void _privateMethod() => noSuchMethod(#_privateMethod, ...);
+  ///     }
+  ///     class C {
+  ///       void method() {}
+  ///     }
+  ///     class D implements C {
+  ///       noSuchMethod(o) { ... }
+  ///       // Forwarding stub inserted to forward calls to `C.method`.
+  ///       void method() => noSuchMethod(#method, ...);
+  ///     }
+  ///
+  ///
+  /// The stub target is `null` if the procedure preexisted as an abstract
+  /// procedure. Otherwise the stub target is one of the inherited members.
+  NoSuchMethodForwarder,
+
+  /// An abstract procedure inserted to show the combined member signature type
+  /// of set of overridden members.
+  ///
+  /// The stub is inserted when an opt-in member is inherited into an opt-out
+  /// library or when NNBD_TOP_MERGE was used to compute the type of a merge
+  /// point in an opt-in library. For instance:
+  ///
+  ///     // lib1: opt-in
+  ///     class A {
+  ///       int? method1() => null;
+  ///       void method2(Object? o) {}
+  ///     }
+  ///     class B {
+  ///       dynamic method2(dynamic o);
+  ///     }
+  ///     class C implements A, B {
+  ///       // Member signature inserted for the NNBD_TOP_MERGE type of
+  ///       // `A.method2` and `B.method2`.
+  ///       Object? method2(Object? o);
+  ///     }
+  ///     // lib2: opt-out
+  ///     class D extends A {
+  ///       // Member signature inserted for the LEGACY_ERASURE type of
+  ///       // `A.method1` and `A.method2` with types `int* Function()`
+  ///       // and `void Function(Object*)`, respectively.
+  ///       int method1();
+  ///       void method2(Object o);
+  ///     }
+  ///
+  /// The stub target is one of the overridden members.
+  MemberSignature,
+
+  /// An abstract procedure inserted for the application of an abstract mixin
+  /// member.
+  ///
+  /// The stub is inserted when an abstract member is mixed into a mixin
+  /// application. For instance:
+  ///
+  ///     class Super {}
+  ///     abstract class Mixin {
+  ///        void method();
+  ///     }
+  ///     class Class = Super with Mixin
+  ///       // A mixin stub for `A.method` is added to `Class`
+  ///       void method();
+  ///     ;
+  ///
+  /// This is added to ensure that interface targets are resolved consistently
+  /// in face of cloning. For instance, without the mixin stub, this call:
+  ///
+  ///     method(Class c) => c.method();
+  ///
+  /// would use `Mixin.method` as its target, but after load from a VM .dill
+  /// (which clones all mixin members) the call would resolve to `Class.method`
+  /// instead. By adding the mixin stub to `Class`, all accesses both before
+  /// and after .dill will point to `Class.method`.
+  ///
+  /// The stub target is the mixin member.
+  MixinStub,
+
+  /// A concrete procedure inserted for the application of a concrete mixin
+  /// member. The implementation calls the mixin member via a super-call.
+  ///
+  /// The stub is inserted when a concrete member is mixed into a mixin
+  /// application. For instance:
+  ///
+  ///     class Super {}
+  ///     abstract class Mixin {
+  ///        void method() {}
+  ///     }
+  ///     class Class = Super with Mixin
+  ///       // A mixin stub for `A.method` is added to `Class` which calls
+  ///       // `A.method`.
+  ///       void method() => super.method();
+  ///     ;
+  ///
+  /// This is added to ensure that super accesses are resolved correctly, even
+  /// in face of cloning. For instance, without the mixin super stub, this super
+  /// call:
+  ///
+  ///     class Subclass extends Class {
+  ///       method(Class c) => super.method();
+  ///     }
+  ///
+  /// would use `Mixin.method` as its target, which would to be update to match
+  /// the cloning of mixin member performed for instance by the VM. By adding
+  /// the mixin super stub to `Class`, all accesses both before and after
+  /// cloning will point to `Class.method`.
+  ///
+  /// The stub target is the called mixin member.
+  MixinSuperStub,
+}
+
 /// A method, getter, setter, index-getter, index-setter, operator overloader,
 /// or factory.
 ///
@@ -2194,66 +2377,47 @@
     super.transformerFlags = newValue;
   }
 
-  Reference forwardingStubSuperTargetReference;
-  Reference forwardingStubInterfaceTargetReference;
-  Reference memberSignatureOriginReference;
+  ProcedureStubKind stubKind;
+  Reference stubTargetReference;
 
   Procedure(Name name, ProcedureKind kind, FunctionNode function,
       {bool isAbstract: false,
       bool isStatic: false,
       bool isExternal: false,
       bool isConst: false,
-      bool isForwardingStub: false,
-      bool isForwardingSemiStub: false,
-      bool isMemberSignature: false,
       bool isExtensionMember: false,
+      bool isSynthetic: false,
       int transformerFlags: 0,
       Uri fileUri,
       Reference reference,
-      Member forwardingStubSuperTarget,
-      Member forwardingStubInterfaceTarget,
-      Member memberSignatureOrigin})
-      : this._byReferenceRenamed(
-          name,
-          kind,
-          function,
-          isAbstract: isAbstract,
-          isStatic: isStatic,
-          isExternal: isExternal,
-          isConst: isConst,
-          isForwardingStub: isForwardingStub,
-          isMemberSignature: isMemberSignature,
-          isForwardingSemiStub: isForwardingSemiStub,
-          isExtensionMember: isExtensionMember,
-          transformerFlags: transformerFlags,
-          fileUri: fileUri,
-          reference: reference,
-          forwardingStubSuperTargetReference:
-              getMemberReferenceBasedOnProcedureKind(
-                  forwardingStubSuperTarget, kind),
-          forwardingStubInterfaceTargetReference:
-              getMemberReferenceBasedOnProcedureKind(
-                  forwardingStubInterfaceTarget, kind),
-          memberSignatureOriginReference:
-              getMemberReferenceBasedOnProcedureKind(
-                  memberSignatureOrigin, kind),
-        );
+      ProcedureStubKind stubKind: ProcedureStubKind.Regular,
+      Member stubTarget})
+      : this._byReferenceRenamed(name, kind, function,
+            isAbstract: isAbstract,
+            isStatic: isStatic,
+            isExternal: isExternal,
+            isConst: isConst,
+            isExtensionMember: isExtensionMember,
+            isSynthetic: isSynthetic,
+            transformerFlags: transformerFlags,
+            fileUri: fileUri,
+            reference: reference,
+            stubKind: stubKind,
+            stubTargetReference:
+                getMemberReferenceBasedOnProcedureKind(stubTarget, kind));
 
   Procedure._byReferenceRenamed(Name name, this.kind, this.function,
       {bool isAbstract: false,
       bool isStatic: false,
       bool isExternal: false,
       bool isConst: false,
-      bool isForwardingStub: false,
-      bool isForwardingSemiStub: false,
-      bool isMemberSignature: false,
       bool isExtensionMember: false,
+      bool isSynthetic: false,
       int transformerFlags: 0,
       Uri fileUri,
       Reference reference,
-      this.forwardingStubSuperTargetReference,
-      this.forwardingStubInterfaceTargetReference,
-      this.memberSignatureOriginReference})
+      this.stubKind: ProcedureStubKind.Regular,
+      this.stubTargetReference})
       : assert(kind != null),
         super(name, fileUri, reference) {
     function?.parent = this;
@@ -2261,12 +2425,10 @@
     this.isStatic = isStatic;
     this.isExternal = isExternal;
     this.isConst = isConst;
-    this.isForwardingStub = isForwardingStub;
-    this.isForwardingSemiStub = isForwardingSemiStub;
-    this.isMemberSignature = isMemberSignature;
     this.isExtensionMember = isExtensionMember;
+    this.isSynthetic = isSynthetic;
     this.transformerFlags = transformerFlags;
-    assert(!(isMemberSignature && memberSignatureOriginReference == null),
+    assert(!(isMemberSignature && stubTargetReference == null),
         "No member signature origin for member signature $this.");
     assert(
         !(memberSignatureOrigin is Procedure &&
@@ -2279,14 +2441,11 @@
   static const int FlagAbstract = 1 << 1;
   static const int FlagExternal = 1 << 2;
   static const int FlagConst = 1 << 3; // Only for external const factories.
-  static const int FlagForwardingStub = 1 << 4;
-  static const int FlagForwardingSemiStub = 1 << 5;
   // TODO(29841): Remove this flag after the issue is resolved.
-  static const int FlagRedirectingFactoryConstructor = 1 << 6;
-  static const int FlagNoSuchMethodForwarder = 1 << 7;
-  static const int FlagExtensionMember = 1 << 8;
-  static const int FlagMemberSignature = 1 << 9;
-  static const int FlagNonNullableByDefault = 1 << 10;
+  static const int FlagRedirectingFactoryConstructor = 1 << 4;
+  static const int FlagExtensionMember = 1 << 5;
+  static const int FlagNonNullableByDefault = 1 << 6;
+  static const int FlagSynthetic = 1 << 7;
 
   bool get isStatic => flags & FlagStatic != 0;
   bool get isAbstract => flags & FlagAbstract != 0;
@@ -2304,11 +2463,16 @@
   /// not declared in the source; it's possible that this is a forwarding
   /// semi-stub (see isForwardingSemiStub).  To determine whether this function
   /// was present in the source, consult [isSyntheticForwarder].
-  bool get isForwardingStub => flags & FlagForwardingStub != 0;
+  bool get isForwardingStub =>
+      stubKind == ProcedureStubKind.ForwardingStub ||
+      stubKind == ProcedureStubKind.ForwardingSuperStub;
 
   /// If set, this flag indicates that although this function is a forwarding
   /// stub, it was present in the original source as an abstract method.
-  bool get isForwardingSemiStub => flags & FlagForwardingSemiStub != 0;
+  bool get isForwardingSemiStub =>
+      !isSynthetic &&
+      (stubKind == ProcedureStubKind.ForwardingStub ||
+          stubKind == ProcedureStubKind.ForwardingSuperStub);
 
   /// If set, this method is a class member added to show the type of an
   /// inherited member.
@@ -2317,7 +2481,7 @@
   /// directly from the member(s) in the supertypes. For instance in case of
   /// an nnbd opt-out class inheriting from an nnbd opt-in class; here all nnbd-
   /// aware types are replaced with legacy types in the inherited signature.
-  bool get isMemberSignature => flags & FlagMemberSignature != 0;
+  bool get isMemberSignature => stubKind == ProcedureStubKind.MemberSignature;
 
   // Indicates if this [Procedure] represents a redirecting factory constructor
   // and doesn't have a runnable body.
@@ -2329,8 +2493,10 @@
   /// source, and it exists solely for the purpose of type checking arguments
   /// and forwarding to [forwardingStubSuperTarget].
   bool get isSyntheticForwarder => isForwardingStub && !isForwardingSemiStub;
+  bool get isSynthetic => flags & FlagSynthetic != 0;
 
-  bool get isNoSuchMethodForwarder => flags & FlagNoSuchMethodForwarder != 0;
+  bool get isNoSuchMethodForwarder =>
+      stubKind == ProcedureStubKind.NoSuchMethodForwarder;
 
   @override
   bool get isExtensionMember => flags & FlagExtensionMember != 0;
@@ -2351,39 +2517,21 @@
     flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
   }
 
-  void set isForwardingStub(bool value) {
-    flags =
-        value ? (flags | FlagForwardingStub) : (flags & ~FlagForwardingStub);
-  }
-
-  void set isForwardingSemiStub(bool value) {
-    flags = value
-        ? (flags | FlagForwardingSemiStub)
-        : (flags & ~FlagForwardingSemiStub);
-  }
-
-  void set isMemberSignature(bool value) {
-    flags =
-        value ? (flags | FlagMemberSignature) : (flags & ~FlagMemberSignature);
-  }
-
   void set isRedirectingFactoryConstructor(bool value) {
     flags = value
         ? (flags | FlagRedirectingFactoryConstructor)
         : (flags & ~FlagRedirectingFactoryConstructor);
   }
 
-  void set isNoSuchMethodForwarder(bool value) {
-    flags = value
-        ? (flags | FlagNoSuchMethodForwarder)
-        : (flags & ~FlagNoSuchMethodForwarder);
-  }
-
   void set isExtensionMember(bool value) {
     flags =
         value ? (flags | FlagExtensionMember) : (flags & ~FlagExtensionMember);
   }
 
+  void set isSynthetic(bool value) {
+    flags = value ? (flags | FlagSynthetic) : (flags & ~FlagSynthetic);
+  }
+
   bool get isInstanceMember => !isStatic;
   bool get isGetter => kind == ProcedureKind.Getter;
   bool get isSetter => kind == ProcedureKind.Setter;
@@ -2403,28 +2551,25 @@
   }
 
   Member get forwardingStubSuperTarget =>
-      forwardingStubSuperTargetReference?.asMember;
-
-  void set forwardingStubSuperTarget(Member target) {
-    forwardingStubSuperTargetReference =
-        getMemberReferenceBasedOnProcedureKind(target, kind);
-  }
+      stubKind == ProcedureStubKind.ForwardingSuperStub
+          ? stubTargetReference?.asMember
+          : null;
 
   Member get forwardingStubInterfaceTarget =>
-      forwardingStubInterfaceTargetReference?.asMember;
+      stubKind == ProcedureStubKind.ForwardingStub
+          ? stubTargetReference?.asMember
+          : null;
 
-  void set forwardingStubInterfaceTarget(Member target) {
-    forwardingStubInterfaceTargetReference =
-        getMemberReferenceBasedOnProcedureKind(target, kind);
+  Member get stubTarget => stubTargetReference?.asMember;
+
+  void set stubTarget(Member target) {
+    stubTargetReference = getMemberReferenceBasedOnProcedureKind(target, kind);
   }
 
-  @override
-  Member get memberSignatureOrigin => memberSignatureOriginReference?.asMember;
-
-  void set memberSignatureOrigin(Member target) {
-    memberSignatureOriginReference =
-        getMemberReferenceBasedOnProcedureKind(target, kind);
-  }
+  Member get memberSignatureOrigin =>
+      stubKind == ProcedureStubKind.MemberSignature
+          ? stubTargetReference?.asMember
+          : null;
 
   R accept<R>(MemberVisitor<R> v) => v.visitProcedure(this);
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 9461731..4730bc6 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1420,6 +1420,7 @@
     int fileEndOffset = readOffset();
     int kindIndex = readByte();
     ProcedureKind kind = ProcedureKind.values[kindIndex];
+    ProcedureStubKind stubKind = ProcedureStubKind.values[readByte()];
     if (node == null) {
       node = new Procedure(null, kind, null, reference: reference);
     } else {
@@ -1437,12 +1438,7 @@
     bool readFunctionNodeNow =
         (kind == ProcedureKind.Factory && functionNodeSize <= 50) ||
             _disableLazyReading;
-    Reference forwardingStubSuperTargetReference =
-        readMemberReference(allowNull: true);
-    Reference forwardingStubInterfaceTargetReference =
-        readMemberReference(allowNull: true);
-    Reference memberSignatureTargetReference =
-        readMemberReference(allowNull: true);
+    Reference stubTargetReference = readMemberReference(allowNull: true);
     FunctionNode function =
         readFunctionNodeOption(!readFunctionNodeNow, endOffset);
     int transformerFlags = getAndResetTransformerFlags();
@@ -1457,17 +1453,13 @@
     node.function = function;
     function?.parent = node;
     node.setTransformerFlagsWithoutLazyLoading(transformerFlags);
-    node.forwardingStubSuperTargetReference =
-        forwardingStubSuperTargetReference;
-    node.forwardingStubInterfaceTargetReference =
-        forwardingStubInterfaceTargetReference;
-    node.memberSignatureOriginReference = memberSignatureTargetReference;
+    node.stubKind = stubKind;
+    node.stubTargetReference = stubTargetReference;
 
-    assert((node.forwardingStubSuperTargetReference != null) ||
+    assert((node.stubKind == ProcedureStubKind.ForwardingSuperStub &&
+            node.stubTargetReference != null) ||
         !(node.isForwardingStub && node.function.body != null));
-    assert(
-        !(node.isMemberSignature &&
-            node.memberSignatureOriginReference == null),
+    assert(!(node.isMemberSignature && node.stubTargetReference == null),
         "No member signature origin for member signature $node.");
     return node;
   }
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 20881c8..15f1a67 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1204,14 +1204,8 @@
 
   @override
   void visitProcedure(Procedure node) {
-    assert(
-        !(node.isMemberSignature &&
-            node.memberSignatureOriginReference == null),
+    assert(!(node.isMemberSignature && node.stubTargetReference == null),
         "No member signature origin for member signature $node.");
-    assert(!(node.isMemberSignature && node.isForwardingStub),
-        "Procedure is both member signature and forwarding stub: $node.");
-    assert(!(node.isMemberSignature && node.isForwardingSemiStub),
-        "Procedure is both member signature and forwarding semi stub: $node.");
     assert(
         !(node.forwardingStubInterfaceTarget is Procedure &&
             (node.forwardingStubInterfaceTarget as Procedure)
@@ -1242,12 +1236,11 @@
     writeOffset(node.fileOffset);
     writeOffset(node.fileEndOffset);
     writeByte(node.kind.index);
+    writeByte(node.stubKind.index);
     writeUInt30(node.flags);
     writeName(node.name ?? _emptyName);
     writeAnnotationList(node.annotations);
-    writeNullAllowedReference(node.forwardingStubSuperTargetReference);
-    writeNullAllowedReference(node.forwardingStubInterfaceTargetReference);
-    writeNullAllowedReference(node.memberSignatureOriginReference);
+    writeNullAllowedReference(node.stubTargetReference);
     writeOptionalFunctionNode(node.function);
     leaveScope(memberScope: true);
 
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index fced0fd..86522b9 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -146,7 +146,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 50;
+  static const int BinaryFormatVersion = 51;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index b457805..3371d54 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -641,15 +641,17 @@
     final Uri activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
 
-    Constructor result = new Constructor(super.clone(node.function),
-        name: node.name,
-        isConst: node.isConst,
-        isExternal: node.isExternal,
-        isSynthetic: node.isSynthetic,
-        initializers: node.initializers.map(super.clone).toList(),
-        transformerFlags: node.transformerFlags,
-        fileUri: _activeFileUri,
-        reference: referenceFrom?.reference)
+    Constructor result = new Constructor(
+      super.clone(node.function),
+      name: node.name,
+      isConst: node.isConst,
+      isExternal: node.isExternal,
+      isSynthetic: node.isSynthetic,
+      initializers: node.initializers.map(super.clone).toList(),
+      transformerFlags: node.transformerFlags,
+      fileUri: _activeFileUri,
+      reference: referenceFrom?.reference,
+    )
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[]
@@ -663,15 +665,13 @@
   Procedure cloneProcedure(Procedure node, Procedure referenceFrom) {
     final Uri activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
-
     Procedure result = new Procedure(
         node.name, node.kind, super.clone(node.function),
         reference: referenceFrom?.reference,
         transformerFlags: node.transformerFlags,
         fileUri: _activeFileUri,
-        forwardingStubSuperTarget: node.forwardingStubSuperTarget,
-        forwardingStubInterfaceTarget: node.forwardingStubInterfaceTarget,
-        memberSignatureOrigin: node.memberSignatureOrigin)
+        stubKind: node.stubKind,
+        stubTarget: node.stubTarget)
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[]
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 84c9ce8..1bed6f2 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1146,14 +1146,14 @@
     if (features.isNotEmpty) {
       writeWord("/*${features.join(',')}*/");
     }
-    if (node.memberSignatureOriginReference != null) {
+    if (node.isMemberSignature) {
       writeFunction(node.function,
           name: getMemberName(node), terminateLine: false);
       if (node.function.body is ReturnStatement) {
         writeSymbol(';');
       }
       writeSymbol(' -> ');
-      writeMemberReferenceFromReference(node.memberSignatureOriginReference);
+      writeMemberReferenceFromReference(node.stubTargetReference);
       endLine();
     } else {
       writeFunction(node.function, name: getMemberName(node));
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0aee5ce..5ef2d8d 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1433,14 +1433,11 @@
   Procedure.FlagAbstract: "abstract",
   Procedure.FlagExternal: "external",
   Procedure.FlagConst: "const",
-  Procedure.FlagForwardingStub: "forwarding-stub",
-  Procedure.FlagForwardingSemiStub: "forwarding-semi-stub",
   Procedure.FlagRedirectingFactoryConstructor:
       "redirecting-factory-constructor",
-  Procedure.FlagNoSuchMethodForwarder: "no-such-method-forwarder",
   Procedure.FlagExtensionMember: "extension-member",
-  Procedure.FlagMemberSignature: "member-signature",
   Procedure.FlagNonNullableByDefault: "non-nullable-by-default",
+  Procedure.FlagSynthetic: "synthetic",
 };
 
 class ProcedureFlagTagger implements Tagger<int> {
diff --git a/pkg/kernel/pubspec.yaml b/pkg/kernel/pubspec.yaml
index dc4c5f73..3609233 100644
--- a/pkg/kernel/pubspec.yaml
+++ b/pkg/kernel/pubspec.yaml
@@ -8,7 +8,8 @@
 environment:
   sdk: '>=2.6.0 <3.0.0'
 dependencies:
-  meta: ^1.0.0
+  meta:
+    path: ../meta
 dev_dependencies:
   args: '>=0.13.4 <2.0.0'
   expect:
diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml
index ed3de13..0a382de 100644
--- a/pkg/nnbd_migration/pubspec.yaml
+++ b/pkg/nnbd_migration/pubspec.yaml
@@ -7,14 +7,18 @@
   sdk: '>=2.6.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^4.0.0
-  analyzer: ^0.40.4
-  analyzer_plugin: ^0.2.4
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
+  analyzer:
+    path: ../analyzer
+  analyzer_plugin:
+    path: ../analyzer_plugin
   args: ^1.4.4
   cli_util: ^0.2.0
   collection: ^1.14.11
   crypto: ^2.0.6
-  meta: ^1.1.6
+  meta:
+    path: ../meta
   path: ^1.6.2
   pub_semver: ^1.4.2
   source_span: ^1.4.1
diff --git a/pkg/scrape/pubspec.yaml b/pkg/scrape/pubspec.yaml
index a011644..ffdaff1 100644
--- a/pkg/scrape/pubspec.yaml
+++ b/pkg/scrape/pubspec.yaml
@@ -2,11 +2,15 @@
 description: Helper package for analyzing the syntax of Dart programs.
 # This package is not intended for consumption on pub.dev. DO NOT publish.
 publish_to: none
+
 environment:
   sdk: ^2.10.0
+
 dependencies:
   args: ^1.6.0
-  analyzer: ^0.40.4
+  analyzer:
+    path: ../analyzer
   path: ^1.7.0
+
 dev_dependencies:
   pedantic: ^1.9.2
diff --git a/pkg/telemetry/pubspec.yaml b/pkg/telemetry/pubspec.yaml
index c3ba85f..ca646aa 100644
--- a/pkg/telemetry/pubspec.yaml
+++ b/pkg/telemetry/pubspec.yaml
@@ -9,7 +9,8 @@
 
 dependencies:
   http: ^0.12.0
-  meta: ^1.0.2
+  meta:
+    path: ../meta
   path: ^1.4.0
   stack_trace: ^1.7.0
   usage: ^3.2.0+1
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 06a0665..2ea1325 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -593,19 +593,19 @@
       } else if (m is Procedure) {
         func = m.function;
         if (m.forwardingStubSuperTarget != null) {
-          m.forwardingStubSuperTarget = fieldMorpher.adjustInstanceCallTarget(
+          m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
               m.forwardingStubSuperTarget,
               isSetter: m.isSetter);
           addUsedMember(m.forwardingStubSuperTarget);
         }
         if (m.forwardingStubInterfaceTarget != null) {
-          m.forwardingStubInterfaceTarget = fieldMorpher
-              .adjustInstanceCallTarget(m.forwardingStubInterfaceTarget,
-                  isSetter: m.isSetter);
+          m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
+              m.forwardingStubInterfaceTarget,
+              isSetter: m.isSetter);
           addUsedMember(m.forwardingStubInterfaceTarget);
         }
         if (m.memberSignatureOrigin != null) {
-          m.memberSignatureOrigin = fieldMorpher.adjustInstanceCallTarget(
+          m.stubTarget = fieldMorpher.adjustInstanceCallTarget(
               m.memberSignatureOrigin,
               isSetter: m.isSetter);
           addUsedMember(m.memberSignatureOrigin);
@@ -1328,8 +1328,10 @@
           _makeUnreachableBody(node.function);
         }
         node.function.asyncMarker = AsyncMarker.Sync;
-        node.forwardingStubSuperTargetReference = null;
-        node.forwardingStubInterfaceTargetReference = null;
+        if (node.forwardingStubSuperTarget != null ||
+            node.forwardingStubInterfaceTarget != null) {
+          node.stubTarget = null;
+        }
         Statistics.methodBodiesDropped++;
       } else if (node is Field) {
         node.initializer = null;
diff --git a/pkg/vm/pubspec.yaml b/pkg/vm/pubspec.yaml
index 9a2d487..95341eb 100644
--- a/pkg/vm/pubspec.yaml
+++ b/pkg/vm/pubspec.yaml
@@ -11,9 +11,12 @@
   build_integration:
     path: ../build_integration
   crypto: any
-  front_end: any
-  kernel: ^0.3.6
-  meta: any
+  front_end:
+    path: ../front_end
+  kernel:
+    path: ../kernel
+  meta:
+    path: ../meta
   package_config: any
 
 dev_dependencies:
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 9fdefe6..04c0b16 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -824,7 +824,7 @@
     const auto& cache = MegamorphicCache::Handle(
         zone, MegamorphicCacheTable::Lookup(thread, name, descriptor));
     {
-      SafepointMutexLocker ml(thread->isolate()->type_feedback_mutex());
+      SafepointMutexLocker ml(thread->isolate_group()->type_feedback_mutex());
       MegamorphicCacheEntries entries(Array::Handle(zone, cache.buckets()));
       for (intptr_t i = 0, n = entries.Length(); i < n; i++) {
         const intptr_t id =
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 0a40040..6b6a2d55 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -784,6 +784,7 @@
   BuildHash(procedure_helper.kind_);
   BuildHash(procedure_helper.flags_);
   BuildHash(procedure_helper.annotation_count_);
+  BuildHash(procedure_helper.stub_kind_);
   BuildHash(name.Hash());
   return hash_;
 }
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index e706302..a90b40d 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1081,6 +1081,10 @@
       kind_ = static_cast<Kind>(helper_->ReadByte());
       if (++next_read_ == field) return;
       FALL_THROUGH;
+    case kStubKind:
+      stub_kind_ = static_cast<StubKind>(helper_->ReadByte());
+      if (++next_read_ == field) return;
+      FALL_THROUGH;
     case kFlags:
       flags_ = helper_->ReadUInt();
       if (++next_read_ == field) return;
@@ -1097,16 +1101,12 @@
       if (++next_read_ == field) return;
     }
       FALL_THROUGH;
-    case kForwardingStubSuperTarget:
-      forwarding_stub_super_target_ = helper_->ReadCanonicalNameReference();
-      if (++next_read_ == field) return;
-      FALL_THROUGH;
-    case kForwardingStubInterfaceTarget:
-      helper_->ReadCanonicalNameReference();
-      if (++next_read_ == field) return;
-      FALL_THROUGH;
-    case kMemberSignatureTarget:
-      helper_->ReadCanonicalNameReference();
+    case kStubTarget:
+      if (stub_kind_ == kForwardingSuperStubKind) {
+        forwarding_stub_super_target_ = helper_->ReadCanonicalNameReference();
+      } else {
+        helper_->ReadCanonicalNameReference();
+      }
       if (++next_read_ == field) return;
       FALL_THROUGH;
     case kFunction:
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index d725cf7..0bb8141 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -517,12 +517,11 @@
     kPosition,
     kEndPosition,
     kKind,
+    kStubKind,
     kFlags,
     kName,
     kAnnotations,
-    kForwardingStubSuperTarget,
-    kForwardingStubInterfaceTarget,
-    kMemberSignatureTarget,
+    kStubTarget,
     kFunction,
     kEnd,
   };
@@ -535,18 +534,26 @@
     kFactory,
   };
 
+  enum StubKind {
+    kRegularStubKind,
+    kForwardingStubKind,
+    kForwardingSuperStubKind,
+    kNoSuchMethodForwarderStubKind,
+    kMemberSignatureStubKind,
+    kMixinStubKind,
+    kMixinSuperStubKind,
+  };
+
   enum Flag {
     kStatic = 1 << 0,
     kAbstract = 1 << 1,
     kExternal = 1 << 2,
     kConst = 1 << 3,  // Only for external const factories.
-    kForwardingStub = 1 << 4,
 
     // TODO(29841): Remove this line after the issue is resolved.
-    kRedirectingFactoryConstructor = 1 << 6,
-    kNoSuchMethodForwarder = 1 << 7,
-    kExtensionMember = 1 << 8,
-    kMemberSignature = 1 << 9,
+    kRedirectingFactoryConstructor = 1 << 4,
+    kExtensionMember = 1 << 5,
+    kSyntheticProcedure = 1 << 7,
   };
 
   explicit ProcedureHelper(KernelReaderHelper* helper)
@@ -565,15 +572,20 @@
   bool IsAbstract() const { return (flags_ & kAbstract) != 0; }
   bool IsExternal() const { return (flags_ & kExternal) != 0; }
   bool IsConst() const { return (flags_ & kConst) != 0; }
-  bool IsForwardingStub() const { return (flags_ & kForwardingStub) != 0; }
+  bool IsForwardingStub() const {
+    return stub_kind_ == kForwardingStubKind ||
+           stub_kind_ == kForwardingSuperStubKind;
+  }
   bool IsRedirectingFactoryConstructor() const {
     return (flags_ & kRedirectingFactoryConstructor) != 0;
   }
   bool IsNoSuchMethodForwarder() const {
-    return (flags_ & kNoSuchMethodForwarder) != 0;
+    return stub_kind_ == kNoSuchMethodForwarderStubKind;
   }
   bool IsExtensionMember() const { return (flags_ & kExtensionMember) != 0; }
-  bool IsMemberSignature() const { return (flags_ & kMemberSignature) != 0; }
+  bool IsMemberSignature() const {
+    return stub_kind_ == kMemberSignatureStubKind;
+  }
 
   NameIndex canonical_name_;
   TokenPosition start_position_;
@@ -583,6 +595,7 @@
   uint32_t flags_ = 0;
   intptr_t source_uri_index_ = 0;
   intptr_t annotation_count_ = 0;
+  StubKind stub_kind_;
 
   // Only valid if the 'isForwardingStub' flag is set.
   NameIndex forwarding_stub_super_target_;
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 1323840..0892f8d 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -12,364 +12,364 @@
 // When adding a new function, add a 0 as the fingerprint and run the build in
 // debug mode to get the correct fingerprint from the mismatch error.
 #define OTHER_RECOGNIZED_LIST(V)                                               \
-  V(::, identical, ObjectIdentical, 0x8fd6ea77)                                \
-  V(ClassID, getID, ClassIDgetID, 0x0401ffad)                                  \
+  V(::, identical, ObjectIdentical, 0x19eb7f33)                                \
+  V(ClassID, getID, ClassIDgetID, 0x4d140cb3)                                  \
   V(Object, Object., ObjectConstructor, 0x89c467da)                            \
-  V(List, ., ListFactory, 0xbec87d52)                                          \
-  V(_List, ., ObjectArrayAllocate, 0x6de199c0)                                 \
-  V(_List, []=, ObjectArraySetIndexed, 0xba1597ae)                             \
-  V(_GrowableList, []=, GrowableArraySetIndexed, 0xba1597ae)                   \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4214c)                  \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb253)                \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f)              \
-  V(ByteData, ., ByteDataFactory, 0x63fefa6a)                                  \
-  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b928a)   \
-  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fd8)          \
-  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b928a) \
-  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fd8)        \
-  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9daf8)             \
-  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014c6)           \
-  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc251)         \
+  V(List, ., ListFactory, 0x1892c890)                                          \
+  V(_List, ., ObjectArrayAllocate, 0x4c9d39e2)                                 \
+  V(_List, []=, ObjectArraySetIndexed, 0xe98d0a9e)                             \
+  V(_GrowableList, []=, GrowableArraySetIndexed, 0xe98d0a9e)                   \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x30688af4)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x31c4acea)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x4885450f)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x4a06a579)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x335cdbca)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x33a21d3b)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0x10a56ebf)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x46a02819)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe425bcd3)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf3595200)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xb3cc1803)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0xbe4aee59)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0x89b17e2a)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0x5781f1d0)                  \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0x630e7aaf)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0x764a82d7)                \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0x6602e5c8)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0x618ede3a)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0x70f58a02)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0x826f6c8d)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2761c274)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x1b858d66)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x9e2320c0)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xfa1f5cf1)              \
+  V(ByteData, ., ByteDataFactory, 0x1a2bee78)                                  \
+  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x3915c92a)   \
+  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x487f857c)          \
+  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x3915c92a) \
+  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x487f857c)        \
+  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xbdff93f4)             \
+  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x955093e6)           \
+  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x666697bb)         \
   V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory,       \
-    0x36da9725)                                                                \
-  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a36717)         \
-  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c32e)       \
-  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d35)         \
-  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f075d)       \
-  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546eb)         \
-  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c22b9)       \
-  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5c0)     \
-  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c753)     \
-  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7773c) \
-  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2c1)     \
-  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d20) \
-  V(Int8List, ., TypedData_Int8Array_factory, 0x80ad8400)                      \
-  V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6787)                    \
-  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed9320d)      \
-  V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8632b)                    \
-  V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f762)                  \
-  V(Int32List, ., TypedData_Int32Array_factory, 0x54a56498)                    \
-  V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deac3)                  \
-  V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c767)                    \
-  V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669770)                  \
-  V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9f6)                \
-  V(Float64List, ., TypedData_Float64Array_factory, 0x09ede849)                \
-  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e700)            \
-  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292166)                \
-  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb62)            \
-  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed694)                 \
+    0x0f265d67)                                                                \
+  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x95778bb5)         \
+  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0xc9d1b27e)       \
+  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x609fa957)         \
+  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x0b0ff42f)       \
+  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xbd01a661)         \
+  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x9c964453)       \
+  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x9a39e22c)     \
+  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0x78a432f9)     \
+  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x85e58030) \
+  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x5132754b)     \
+  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x9d86a6cc) \
+  V(Int8List, ., TypedData_Int8Array_factory, 0x934e97a2)                      \
+  V(Uint8List, ., TypedData_Uint8Array_factory, 0x7eea24fb)                    \
+  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0xba98ab35)      \
+  V(Int16List, ., TypedData_Int16Array_factory, 0x54af9dd7)                    \
+  V(Uint16List, ., TypedData_Uint16Array_factory, 0xc3859080)                  \
+  V(Int32List, ., TypedData_Int32Array_factory, 0x3e52ca0a)                    \
+  V(Uint32List, ., TypedData_Uint32Array_factory, 0xdbbb093f)                  \
+  V(Int64List, ., TypedData_Int64Array_factory, 0x560fc11b)                    \
+  V(Uint64List, ., TypedData_Uint64Array_factory, 0x02b7f232)                  \
+  V(Float32List, ., TypedData_Float32Array_factory, 0xdf9d206c)                \
+  V(Float64List, ., TypedData_Float64Array_factory, 0x321abc79)                \
+  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xa0de94a2)            \
+  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xfe46a6fc)                \
+  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xfac00c80)            \
+  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x84e4b390)                 \
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
-    CopyRangeFromUint8ListToOneByteString, 0x89d6a629)                         \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58f1b)              \
-  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db614)             \
-  V(_Double, _add, DoubleAdd, 0x43269649)                                      \
-  V(_Double, _sub, DoubleSub, 0x81077f50)                                      \
-  V(_Double, _mul, DoubleMul, 0x7858fa8e)                                      \
-  V(_Double, _div, DoubleDiv, 0x813d6ab3)                                      \
-  V(::, min, MathMin, 0xe6a2f523)                                              \
-  V(::, max, MathMax, 0x4cfa6f8a)                                              \
-  V(::, _doublePow, MathDoublePow, 0x9772a8e0)                                 \
-  V(::, _intPow, MathIntPow, 0x65762aa8)                                       \
-  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1ef)        \
-  V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d829c)                      \
-  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae8807)                    \
-  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704459c)      \
-  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a67)      \
-  V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd74d)                         \
-  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42ee)                   \
-  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b98c)                \
-  V(_Float32x4, equal, Float32x4Equal, 0x77b31298)                             \
-  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a2a1)                 \
-  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686d9)   \
-  V(_Float32x4, lessThan, Float32x4LessThan, 0x7d70963f)                       \
-  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7862)         \
-  V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a65)                       \
-  V(_Float32x4, min, Float32x4Min, 0x0ad969b4)                                 \
-  V(_Float32x4, max, Float32x4Max, 0xed08eb85)                                 \
-  V(_Float32x4, scale, Float32x4Scale, 0xfdf348e4)                             \
-  V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853e14)                               \
-  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66359a)           \
-  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065d4)                   \
-  V(_Float32x4, unary-, Float32x4Negate, 0x86111e0e)                           \
-  V(_Float32x4, abs, Float32x4Abs, 0x8ad4c1aa)                                 \
-  V(_Float32x4, clamp, Float32x4Clamp, 0x374a9dbf)                             \
-  V(_Float32x4, _withX, Float32x4WithX, 0xfd53a091)                            \
-  V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b525)                            \
-  V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f82)                            \
-  V(_Float32x4, _withW, Float32x4WithW, 0xef6f233d)                            \
-  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f495)        \
-  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71932)                      \
-  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bd08)                    \
-  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b440)      \
-  V(_Float64x2, get:x, Float64x2GetX, 0xd83e57b0)                              \
-  V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2d3)                              \
-  V(_Float64x2, unary-, Float64x2Negate, 0x48fab4a4)                           \
-  V(_Float64x2, abs, Float64x2Abs, 0x4dbe5840)                                 \
-  V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed4aa)                               \
-  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b98c)                \
-  V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf7a)                             \
-  V(_Float64x2, _withX, Float64x2WithX, 0xc03d3727)                            \
-  V(_Float64x2, _withY, Float64x2WithY, 0xb8df4bbb)                            \
-  V(_Float64x2, min, Float64x2Min,  0x6b5e1774)                                \
-  V(_Float64x2, max, Float64x2Max,  0x4d8d9945)                                \
-  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec74)                    \
-  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05bf0c)                  \
-  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x789399bb)        \
-  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbd8)                          \
-  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x928402b8)                          \
-  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9e0b)                          \
-  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db04c)                          \
-  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b98c)                    \
-  V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b35)                             \
-  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e8be)                       \
-  V(_Int32x4, select, Int32x4Select, 0x2847cb82)                               \
-  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5c5)                        \
-  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x94567108)                        \
-  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5db6)                        \
-  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebaceba)                        \
-  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe16143ba)               \
-  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c8999b6)               \
-  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d03a0b)                 \
-  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c87)                 \
-  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55344b)         \
-  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbbc7)         \
-  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67fa)         \
-  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef76)         \
-  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64fe)   \
-  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec7a)   \
-  V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76890)                         \
-  V(::, _abi, FfiAbi, 0x00a48df9)                                              \
-  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f680)                \
-  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60d02)        \
-  V(::, _loadInt8, FfiLoadInt8, 0x7b779ef2)                                    \
-  V(::, _loadInt16, FfiLoadInt16, 0x58b6f049)                                  \
-  V(::, _loadInt32, FfiLoadInt32, 0x5a94fedf)                                  \
-  V(::, _loadInt64, FfiLoadInt64, 0x4b627ebf)                                  \
-  V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbed)                                  \
-  V(::, _loadUint16, FfiLoadUint16, 0x79491c06)                                \
-  V(::, _loadUint32, FfiLoadUint32, 0x62e14f71)                                \
-  V(::, _loadUint64, FfiLoadUint64, 0x7178bce8)                                \
-  V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c735a)                                \
-  V(::, _loadFloat, FfiLoadFloat, 0x7f0471f9)                                  \
-  V(::, _loadDouble, FfiLoadDouble, 0x7d37b3b5)                                \
-  V(::, _loadPointer, FfiLoadPointer, 0x3691c06c)                              \
-  V(::, _storeInt8, FfiStoreInt8, 0x118e5be8)                                  \
-  V(::, _storeInt16, FfiStoreInt16, 0x0a8ba00e)                                \
-  V(::, _storeInt32, FfiStoreInt32, 0x2e23d939)                                \
-  V(::, _storeInt64, FfiStoreInt64, 0x2411ba56)                                \
-  V(::, _storeUint8, FfiStoreUint8, 0x37ab7fd2)                                \
-  V(::, _storeUint16, FfiStoreUint16, 0x153b57ba)                              \
-  V(::, _storeUint32, FfiStoreUint32, 0x181595a1)                              \
-  V(::, _storeUint64, FfiStoreUint64, 0x1516df15)                              \
-  V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401384)                              \
-  V(::, _storeFloat, FfiStoreFloat, 0x23292bda)                                \
-  V(::, _storeDouble, FfiStoreDouble, 0x013dc7c0)                              \
-  V(::, _storePointer, FfiStorePointer, 0x43c38f81)                            \
-  V(::, _fromAddress, FfiFromAddress, 0xab4ae572)                              \
-  V(Pointer, get:address, FfiGetAddress, 0x012b2bbe)                           \
-  V(::, reachabilityFence, ReachabilityFence, 0xad39d0c5)                      \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0097)                          \
-  V(_Future, timeout, FutureTimeout, 0xdea67277)                               \
-  V(Future, wait, FutureWait, 0x6c0c3295)                                      \
+    CopyRangeFromUint8ListToOneByteString, 0xeb5abaa9)                         \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xe8ece5a1)              \
+  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x33d887fc)             \
+  V(_Double, _add, DoubleAdd, 0x1ba15967)                                      \
+  V(_Double, _sub, DoubleSub, 0x5982426e)                                      \
+  V(_Double, _mul, DoubleMul, 0x50d3bdac)                                      \
+  V(_Double, _div, DoubleDiv, 0x59b82dd1)                                      \
+  V(::, min, MathMin, 0xa24c3a83)                                              \
+  V(::, max, MathMax, 0x8552d67e)                                              \
+  V(::, _doublePow, MathDoublePow, 0x9441cc3a)                                 \
+  V(::, _intPow, MathIntPow, 0x409dd978)                                       \
+  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x790497df)        \
+  V(Float32x4, Float32x4.zero, Float32x4Zero, 0x9657735e)                      \
+  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0xb0d7702d)                    \
+  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0xda38dd92)      \
+  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0xe41a2079)      \
+  V(_Float32x4, shuffle, Float32x4Shuffle, 0xac90c309)                         \
+  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0x3d6d7e46)                   \
+  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x54b1e8e8)                \
+  V(_Float32x4, equal, Float32x4Equal, 0xc9591626)                             \
+  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0xd74ba62f)                 \
+  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0xd36c8a67)   \
+  V(_Float32x4, lessThan, Float32x4LessThan, 0xcf1699cd)                       \
+  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0xcb757bf0)         \
+  V(_Float32x4, notEqual, Float32x4NotEqual, 0xe94d5df3)                       \
+  V(_Float32x4, min, Float32x4Min, 0x04e45812)                                 \
+  V(_Float32x4, max, Float32x4Max, 0xe713d9e3)                                 \
+  V(_Float32x4, scale, Float32x4Scale, 0xde622d94)                             \
+  V(_Float32x4, sqrt, Float32x4Sqrt, 0xa7982e0e)                               \
+  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0xa0792594)           \
+  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x96f355ce)                   \
+  V(_Float32x4, unary-, Float32x4Negate, 0xa94cf76e)                           \
+  V(_Float32x4, abs, Float32x4Abs, 0xade7b1a4)                                 \
+  V(_Float32x4, clamp, Float32x4Clamp, 0x57c0dbb9)                             \
+  V(_Float32x4, _withX, Float32x4WithX, 0xddc28541)                            \
+  V(_Float32x4, _withY, Float32x4WithY, 0xd66499d5)                            \
+  V(_Float32x4, _withZ, Float32x4WithZ, 0xd2811432)                            \
+  V(_Float32x4, _withW, Float32x4WithW, 0xcfde07ed)                            \
+  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9f0a0865)        \
+  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x30a0af88)                      \
+  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xe169544e)                    \
+  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0x7ad848fa)      \
+  V(_Float64x2, get:x, Float64x2GetX, 0xf36ac93a)                              \
+  V(_Float64x2, get:y, Float64x2GetY, 0xe0fc245d)                              \
+  V(_Float64x2, unary-, Float64x2Negate, 0x43963398)                           \
+  V(_Float64x2, abs, Float64x2Abs, 0x4830edce)                                 \
+  V(_Float64x2, sqrt, Float64x2Sqrt, 0x41e16a38)                               \
+  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x54b1e8e8)                \
+  V(_Float64x2, scale, Float64x2Scale, 0x78ab69be)                             \
+  V(_Float64x2, _withX, Float64x2WithX, 0x780bc16b)                            \
+  V(_Float64x2, _withY, Float64x2WithY, 0x70add5ff)                            \
+  V(_Float64x2, min, Float64x2Min,  0xb4f56252)                                \
+  V(_Float64x2, max, Float64x2Max,  0x9724e423)                                \
+  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0x533214b0)                    \
+  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x17964f48)                  \
+  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0xca709e11)        \
+  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x998cbdb6)                          \
+  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0xb4fcf496)                          \
+  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xc2a68fe9)                          \
+  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xcbc6a22a)                          \
+  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x54b1e8e8)                    \
+  V(_Int32x4, shuffle, Int32x4Shuffle, 0xa9398c21)                             \
+  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0x0a889276)                       \
+  V(_Int32x4, select, Int32x4Select, 0x48be097c)                               \
+  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0x7f4a63d1)                        \
+  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x703aff14)                        \
+  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x6f70ebc2)                        \
+  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x7a9f5cc6)                        \
+  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xf6b408ce)               \
+  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0xb0967252)               \
+  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xe81ec483)                 \
+  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x719e1187)                 \
+  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0x1f4f6aeb)         \
+  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0xa209d2ef)         \
+  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0x27559e9a)         \
+  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0xaa10069e)         \
+  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0x29549b9e)   \
+  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0xac0f03a2)   \
+  V(::, _classRangeCheck, ClassRangeCheck, 0x071d2ec8)                         \
+  V(::, _abi, FfiAbi, 0x54918e73)                                              \
+  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x2d4e5e32)                \
+  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x68db1afc)        \
+  V(::, _loadInt8, FfiLoadInt8, 0x3b38d254)                                    \
+  V(::, _loadInt16, FfiLoadInt16, 0x187823ab)                                  \
+  V(::, _loadInt32, FfiLoadInt32, 0x1a563241)                                  \
+  V(::, _loadInt64, FfiLoadInt64, 0x0b23b221)                                  \
+  V(::, _loadUint8, FfiLoadUint8, 0x0d820f4f)                                  \
+  V(::, _loadUint16, FfiLoadUint16, 0x390a4f68)                                \
+  V(::, _loadUint32, FfiLoadUint32, 0x22a282d3)                                \
+  V(::, _loadUint64, FfiLoadUint64, 0x3139f04a)                                \
+  V(::, _loadIntPtr, FfiLoadIntPtr, 0x180da6bc)                                \
+  V(::, _loadFloat, FfiLoadFloat, 0x05f7e3e7)                                  \
+  V(::, _loadDouble, FfiLoadDouble, 0x042b25a3)                                \
+  V(::, _loadPointer, FfiLoadPointer, 0x117833fa)                              \
+  V(::, _storeInt8, FfiStoreInt8, 0xdaa635d2)                                  \
+  V(::, _storeInt16, FfiStoreInt16, 0xd3a379f8)                                \
+  V(::, _storeInt32, FfiStoreInt32, 0xf73bb323)                                \
+  V(::, _storeInt64, FfiStoreInt64, 0xed299440)                                \
+  V(::, _storeUint8, FfiStoreUint8, 0x00c359bc)                                \
+  V(::, _storeUint16, FfiStoreUint16, 0xde5331a4)                              \
+  V(::, _storeUint32, FfiStoreUint32, 0xe12d6f8b)                              \
+  V(::, _storeUint64, FfiStoreUint64, 0xde2eb8ff)                              \
+  V(::, _storeIntPtr, FfiStoreIntPtr, 0x0357ed6e)                              \
+  V(::, _storeFloat, FfiStoreFloat, 0xafddd150)                                \
+  V(::, _storeDouble, FfiStoreDouble, 0x8df26d36)                              \
+  V(::, _storePointer, FfiStorePointer, 0xf3b14e97)                            \
+  V(::, _fromAddress, FfiFromAddress, 0x811e2220)                              \
+  V(Pointer, get:address, FfiGetAddress, 0x55255ebc)                           \
+  V(::, reachabilityFence, ReachabilityFence, 0xde1dc5bd)                      \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb35ced99)                          \
+  V(_Future, timeout, FutureTimeout, 0x39966bdf)                               \
+  V(Future, wait, FutureWait, 0x9f3934e1)                                      \
 
 // List of intrinsics:
 // (class-name, function-name, intrinsification method, fingerprint).
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
-  V(_Smi, ~, Smi_bitNegate, 0x068652d7)                                        \
-  V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0eb)                            \
-  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e0b2)                       \
-  V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb61c)                                 \
-  V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24d7)                                 \
-  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61c7)                           \
-  V(_BigIntImpl, _absSub, Bigint_absSub, 0x7688734f)                           \
-  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb27412b5)                           \
-  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0faeb)                           \
+  V(_Smi, ~, Smi_bitNegate, 0x5a9bcc19)                                        \
+  V(_Smi, get:bitLength, Smi_bitLength, 0x52fbe3e9)                            \
+  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0x7818c386)                       \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0xb7f65896)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0x3922f42b)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x295e93f3)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0x273f7af1)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xba45f6ad)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x2db11c6b)                           \
   V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit,         \
-    0x14527ef8)                                                                \
-  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df27b4)        \
-  V(_Double, >, Double_greaterThan, 0xe88b701b)                                \
-  V(_Double, >=, Double_greaterEqualThan, 0x1fb70bcd)                          \
-  V(_Double, <, Double_lessThan, 0xae875044)                                   \
-  V(_Double, <=, Double_lessEqualThan, 0xc87a506f)                             \
-  V(_Double, ==, Double_equal, 0x5299f1f1)                                     \
-  V(_Double, +, Double_add, 0x783a47f3)                                        \
-  V(_Double, -, Double_sub, 0x493f1484)                                        \
-  V(_Double, *, Double_mul, 0xae0df301)                                        \
-  V(_Double, /, Double_div, 0xed535dfd)                                        \
-  V(_Double, get:hashCode, Double_hashCode, 0xfa2d7835)                        \
-  V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cf3)           \
-  V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcf13)                           \
-  V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93d2)                 \
-  V(_Double, get:isNegative, Double_getIsNegative, 0x88e61891)                 \
-  V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa47)               \
-  V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad815)                      \
-  V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5947)             \
-  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817558d)                   \
-  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30853)       \
-  V(Object, ==, ObjectEquals, 0xbc3cad68)                                      \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0)                    \
-  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc77)       \
-  V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7854)                 \
-  V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20d12)       \
-  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9cb1)                   \
-  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c892)    \
-  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd)                             \
-  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7854)       \
+    0x3c62c74c)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x091127d0)        \
+  V(_Double, >, Double_greaterThan, 0xc4a96c0f)                                \
+  V(_Double, >=, Double_greaterEqualThan, 0x335a31b3)                          \
+  V(_Double, <, Double_lessThan, 0x059b1fd8)                                   \
+  V(_Double, <=, Double_lessEqualThan, 0xeb04cf95)                             \
+  V(_Double, ==, Double_equal, 0x094145f1)                                     \
+  V(_Double, +, Double_add, 0x74e922bb)                                        \
+  V(_Double, -, Double_sub, 0x67d62f0c)                                        \
+  V(_Double, *, Double_mul, 0xa95d3909)                                        \
+  V(_Double, /, Double_div, 0x9f8bc745)                                        \
+  V(_Double, get:hashCode, Double_hashCode, 0x4e27a791)                        \
+  V(_Double, get:_identityHashCode, Double_identityHash, 0x1fec3c4f)           \
+  V(_Double, get:isNaN, Double_getIsNaN, 0xab76c0f1)                           \
+  V(_Double, get:isInfinite, Double_getIsInfinite, 0x9be885b0)                 \
+  V(_Double, get:isNegative, Double_getIsNegative, 0xab5f0a6f)                 \
+  V(_Double, _mulFromInteger, Double_mulFromInteger, 0x88ace077)               \
+  V(_Double, .fromInteger, DoubleFromInteger, 0x0f908a15)                      \
+  V(_GrowableList, ._withData, GrowableArray_Allocate, 0x1947d8a1)             \
+  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0xd8114d5f)                   \
+  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0xd0dd0025)       \
+  V(Object, ==, ObjectEquals, 0xd3f5f95a)                                      \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x8177627e)                    \
+  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xe61da79f)       \
+  V(_StringBase, get:hashCode, String_getHashCode, 0x4e27ab52)                 \
+  V(_StringBase, get:_identityHashCode, String_identityHash, 0x1fec4010)       \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xfda61c55)                   \
+  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf07e5912)    \
+  V(_StringBase, [], StringBaseCharAt, 0x6c55f9a1)                             \
+  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x4e27ab52)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
-    OneByteString_substringUnchecked,  0x0d39e4c0)                             \
-  V(_OneByteString, ==, OneByteString_equality, 0x3399def0)                    \
-  V(_TwoByteString, ==, TwoByteString_equality, 0x3399def0)                    \
-  V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7854)                         \
-  V(_Type, ==, Type_equality, 0xbc3cad2a)                                      \
-  V(::, _getHash, Object_getHash, 0x87e0c75c)                                  \
-  V(::, _setHash, Object_setHash, 0xcb4f51f1)                                  \
+    OneByteString_substringUnchecked,  0xd81afdbe)                             \
+  V(_OneByteString, ==, OneByteString_equality, 0x483ef8d2)                    \
+  V(_TwoByteString, ==, TwoByteString_equality, 0x483ef8d2)                    \
+  V(_Type, get:hashCode, Type_getHashCode, 0x4e27ab52)                         \
+  V(_Type, ==, Type_equality, 0xd3f5f1d8)                                      \
+  V(::, _getHash, Object_getHash, 0x1d1372ac)                                  \
+  V(::, _setHash, Object_setHash, 0x77e0bb27)                                  \
 
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
   V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger,           \
-    0xdb88078d)                                                                \
-  V(_IntegerImplementation, +, Integer_add, 0x9b2718df)                        \
+    0x4965932b)                                                                \
+  V(_IntegerImplementation, +, Integer_add, 0xaf966f4f)                        \
   V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger,           \
-    0xa1d87581)                                                                \
-  V(_IntegerImplementation, -, Integer_sub, 0x6c350ed0)                        \
+    0x0fb6011f)                                                                \
+  V(_IntegerImplementation, -, Integer_sub, 0xa39f7e40)                        \
   V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger,           \
-    0xa93fad20)                                                                \
-  V(_IntegerImplementation, *, Integer_mul, 0x4197cead)                        \
+    0x171d38be)                                                                \
+  V(_IntegerImplementation, *, Integer_mul, 0x870ed2dd)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
-    0xd04091ad)                                                                \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb421)               \
-  V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7728)                \
+    0x3e1e1d4b)                                                                \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xaade713f)               \
+  V(_IntegerImplementation, unary-, Integer_negate, 0x8c0ec194)                \
   V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
-    0xcbb1b7b1)                                                                \
-  V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f83)                     \
+    0x398f434f)                                                                \
+  V(_IntegerImplementation, &, Integer_bitAnd, 0xd8a76af3)                     \
   V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger,       \
-    0xbd3f9489)                                                                \
-  V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b3b)                      \
+    0x2b1d2027)                                                                \
+  V(_IntegerImplementation, |, Integer_bitOr, 0xdc51e4ab)                      \
   V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger,     \
-    0xae7f644d)                                                                \
-  V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6742)                     \
+    0x1c5cefeb)                                                                \
+  V(_IntegerImplementation, ^, Integer_bitXor, 0x2542adb2)                     \
   V(_IntegerImplementation, _greaterThanFromInteger,                           \
-    Integer_greaterThanFromInt, 0x47319245)                                    \
-  V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374eb)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0xca4e70a6)                     \
+    Integer_greaterThanFromInt, 0x838ddcc3)                                    \
+  V(_IntegerImplementation, >, Integer_greaterThan, 0x0c62013f)                \
+  V(_IntegerImplementation, ==, Integer_equal, 0x881c9ddc)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
-    0x4d9e5fe4)                                                                \
-  V(_IntegerImplementation, <, Integer_lessThan, 0xae875044)                   \
-  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a506f)             \
-  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bcd)          \
-  V(_IntegerImplementation, <<, Integer_shl, 0xe8da52b5)                       \
-  V(_IntegerImplementation, >>, Integer_sar, 0x4fb2015a)                       \
-  V(_Double, toInt, DoubleToInteger, 0xebc9640a)                               \
+    0x89faaa62)                                                                \
+  V(_IntegerImplementation, <, Integer_lessThan, 0x059b1fd8)                   \
+  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xeb04cf95)             \
+  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x335a31b3)          \
+  V(_IntegerImplementation, <<, Integer_shl, 0xc378efa5)                       \
+  V(_IntegerImplementation, >>, Integer_sar, 0xe029aa4a)                       \
+  V(_Double, toInt, DoubleToInteger, 0x3fb5f3e6)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(::, sqrt, MathSqrt, 0x98d7cb58)                                            \
-  V(_Random, _nextState, Random_nextState, 0x2c1cf101)                         \
+  V(::, sqrt, MathSqrt, 0x1d97494a)                                            \
+  V(_Random, _nextState, Random_nextState, 0x7e5ba345)                         \
 
 #define GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                       \
-  V(::, sin, MathSin, 0x859e669f)                                              \
-  V(::, cos, MathCos, 0xd2dae3ad)                                              \
-  V(::, tan, MathTan, 0xa23c1141)                                              \
-  V(::, asin, MathAsin, 0x1cdb13be)                                            \
-  V(::, acos, MathAcos, 0x830d84d9)                                            \
-  V(::, atan, MathAtan, 0x35d5ecf6)                                            \
-  V(::, atan2, MathAtan2, 0xb4e03b07)                                          \
+  V(::, sin, MathSin, 0xb89b1cb1)                                              \
+  V(::, cos, MathCos, 0x82a25065)                                              \
+  V(::, tan, MathTan, 0x65b9839b)                                              \
+  V(::, asin, MathAsin, 0x7e24237c)                                            \
+  V(::, acos, MathAcos, 0xc484d233)                                            \
+  V(::, atan, MathAtan, 0xb6c154e6)                                            \
+  V(::, atan2, MathAtan2, 0x8e6e8a7b)                                          \
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
-  V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79dc)                            \
-  V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e91)                           \
-  V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67e1c)                          \
-  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a4d)                         \
-  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67e1c)         \
-  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a4d)        \
-  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67e1c)            \
-  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb0ad)           \
+  V(_Int8List, [], Int8ArrayGetIndexed, 0x0cc3b782)                            \
+  V(_Int8List, []=, Int8ArraySetIndexed, 0xb44a501b)                           \
+  V(_Uint8List, [], Uint8ArrayGetIndexed, 0x723c3b42)                          \
+  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x00d95bdf)                         \
+  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x723c3b42)         \
+  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x00d95bdf)        \
+  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x723c3b42)            \
+  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xf6d9117f)           \
   V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed,       \
-    0xe1a67e1c)                                                                \
+    0x723c3b42)                                                                \
   V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed,      \
-    0x5facb0ad)                                                                \
-  V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae7c)                          \
-  V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4da6)                         \
-  V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2527c)                        \
-  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b4f)                       \
-  V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58fd)                          \
-  V(_Int32List, []=, Int32ArraySetIndexed, 0x61194127)                         \
-  V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf5d)                        \
-  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53ca7)                       \
-  V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b6bd)                          \
-  V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6e9)                         \
-  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa13d)                        \
-  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374eb1)                       \
-  V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2422)                      \
-  V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d557)                     \
-  V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87f02)                      \
-  V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a69)                     \
-  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520db)                  \
-  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7402e)                 \
-  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e93)                      \
-  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152ace)                     \
-  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a3205)                  \
-  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd1921a)                 \
-  V(_TypedList, get:length, TypedListLength, 0xdc9d90c9)                       \
-  V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90c9)               \
-  V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90c9)                 \
-  V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e57b0)                          \
-  V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2d3)                          \
-  V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e69)                          \
-  V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62eb)                          \
-  V(_Float32x4, *, Float32x4Mul, 0x0be25e43)                                   \
-  V(_Float32x4, /, Float32x4Div, 0xe73114c0)                                   \
-  V(_Float32x4, -, Float32x4Sub, 0x03c44e06)                                   \
-  V(_Float32x4, +, Float32x4Add, 0xde8b8395)                                   \
-  V(_Float64x2, *, Float64x2Mul, 0x6c670be4)                                   \
-  V(_Float64x2, /, Float64x2Div, 0x47b5c280)                                   \
-  V(_Float64x2, -, Float64x2Sub, 0x6448fba7)                                   \
-  V(_Float64x2, +, Float64x2Add, 0x3f103136)                                   \
+    0xf6d9117f)                                                                \
+  V(_Int16List, [], Int16ArrayGetIndexed, 0xecc216e2)                          \
+  V(_Int16List, []=, Int16ArraySetIndexed, 0x44ca13a6)                         \
+  V(_Uint16List, [], Uint16ArrayGetIndexed, 0xd09af2e2)                        \
+  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x2d0cbb1d)                       \
+  V(_Int32List, [], Int32ArrayGetIndexed, 0xee5fbc81)                          \
+  V(_Int32List, []=, Int32ArraySetIndexed, 0x22fe9045)                         \
+  V(_Uint32List, [], Uint32ArrayGetIndexed, 0x3db22221)                        \
+  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x0ea204c5)                       \
+  V(_Int64List, [], Int64ArrayGetIndexed, 0x272816c1)                          \
+  V(_Int64List, []=, Int64ArraySetIndexed, 0xeb40c2c3)                         \
+  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x63ec7c41)                        \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xb6a233fb)                       \
+  V(_Float64List, [], Float64ArrayGetIndexed, 0x4a2c55fc)                      \
+  V(_Float64List, []=, Float64ArraySetIndexed, 0x9f268215)                     \
+  V(_Float32List, [], Float32ArrayGetIndexed, 0x202a571c)                      \
+  V(_Float32List, []=, Float32ArraySetIndexed, 0xfa74df43)                     \
+  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0x96b1f063)                  \
+  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xe010721e)                 \
+  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x9cc8b9ab)                      \
+  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x0a7fdb7e)                     \
+  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0x674f0479)                  \
+  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x0b505db2)                 \
+  V(_TypedList, get:length, TypedListLength, 0x3097c769)                       \
+  V(_TypedListView, get:length, TypedListViewLength, 0x3097c769)               \
+  V(_ByteDataView, get:length, ByteDataViewLength, 0x3097c769)                 \
+  V(_Float32x4, get:x, Float32x4ShuffleX, 0xf36ac93a)                          \
+  V(_Float32x4, get:y, Float32x4ShuffleY, 0xe0fc245d)                          \
+  V(_Float32x4, get:z, Float32x4ShuffleZ, 0x16c78ff3)                          \
+  V(_Float32x4, get:w, Float32x4ShuffleW, 0xf907d475)                          \
+  V(_Float32x4, *, Float32x4Mul, 0x06163607)                                   \
+  V(_Float32x4, /, Float32x4Div, 0xe164e8e2)                                   \
+  V(_Float32x4, -, Float32x4Sub, 0xfdf825ca)                                   \
+  V(_Float32x4, +, Float32x4Add, 0xd8bf5b59)                                   \
+  V(_Float64x2, *, Float64x2Mul, 0xb6273c86)                                   \
+  V(_Float64x2, /, Float64x2Div, 0x9175f322)                                   \
+  V(_Float64x2, -, Float64x2Sub, 0xae092c49)                                   \
+  V(_Float64x2, +, Float64x2Add, 0x88d061d8)                                   \
 
 #define GRAPH_CORE_INTRINSICS_LIST(V)                                          \
-  V(_List, get:length, ObjectArrayLength, 0xdc9d90c9)                          \
-  V(_List, [], ObjectArrayGetIndexed, 0xd159deed)                              \
-  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f62)            \
-  V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90c9)              \
-  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159deed)                  \
-  V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90c9)                \
-  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c50)           \
-  V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a5f)                 \
-  V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da77ba)             \
-  V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159deed)                    \
-  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e43)  \
-  V(_StringBase, get:length, StringBaseLength, 0xdc9d90c9)                     \
-  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c32)           \
-  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c32)           \
+  V(_List, get:length, ObjectArrayLength, 0x3097c769)                          \
+  V(_List, [], ObjectArrayGetIndexed, 0x78f4f491)                              \
+  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0x367abfe8)            \
+  V(_ImmutableList, get:length, ImmutableArrayLength, 0x3097c769)              \
+  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0x78f4f491)                  \
+  V(_GrowableList, get:length, GrowableArrayLength, 0x3097c769)                \
+  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x55e672f0)           \
+  V(_GrowableList, _setData, GrowableArraySetData, 0x9388253f)                 \
+  V(_GrowableList, _setLength, GrowableArraySetLength, 0xba5d44fc)             \
+  V(_GrowableList, [], GrowableArrayGetIndexed, 0x78f4f491)                    \
+  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0xa1960d27)  \
+  V(_StringBase, get:length, StringBaseLength, 0x3097c769)                     \
+  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x323db7d0)           \
+  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x323db7d0)           \
   V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt,       \
-    0xc4602c32)                                                                \
+    0x323db7d0)                                                                \
   V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt,       \
-    0xc4602c32)                                                                \
-  V(_Double, unary-, DoubleFlipSignBit, 0xdb229467)                            \
-  V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f83a)                     \
-  V(_Double, roundToDouble, DoubleRound, 0xf45c3be1)                           \
-  V(_Double, floorToDouble, DoubleFloor, 0xf2c73d29)                           \
-  V(_Double, ceilToDouble, DoubleCeil, 0xfd2e40ba)                             \
-  V(_Double, _modulo, DoubleMod, 0x5673c750)
+    0x323db7d0)                                                                \
+  V(_Double, unary-, DoubleFlipSignBit, 0xf66a4c35)                            \
+  V(_Double, truncateToDouble, DoubleTruncate, 0x1c05c6a2)                     \
+  V(_Double, roundToDouble, DoubleRound, 0x0f7b0a49)                           \
+  V(_Double, floorToDouble, DoubleFloor, 0x0de60b91)                           \
+  V(_Double, ceilToDouble, DoubleCeil, 0x184d0f22)                             \
+  V(_Double, _modulo, DoubleMod, 0x2eee8a6e)
 
 #define GRAPH_INTRINSICS_LIST(V)                                               \
   GRAPH_CORE_INTRINSICS_LIST(V)                                                \
@@ -377,16 +377,16 @@
   GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                             \
 
 #define DEVELOPER_LIB_INTRINSIC_LIST(V)                                        \
-  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344d2)                    \
-  V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e44b)                        \
-  V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec34)                    \
-  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa37)        \
+  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0xc0abd700)                    \
+  V(::, _getDefaultTag, UserTag_defaultTag, 0xd0ebe717)                        \
+  V(::, _getCurrentTag, Profiler_getCurrentTag, 0xd5bcef00)                    \
+  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xa0686991)        \
 
 #define INTERNAL_LIB_INTRINSIC_LIST(V)                                         \
-  V(::, allocateOneByteString, AllocateOneByteString, 0xc86bebfa)              \
-  V(::, allocateTwoByteString, AllocateTwoByteString, 0xd0312797)              \
-  V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xe0d28307)            \
-  V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xd82789d0)            \
+  V(::, allocateOneByteString, AllocateOneByteString, 0x3a5d74f6)              \
+  V(::, allocateTwoByteString, AllocateTwoByteString, 0x4222b093)              \
+  V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xa2337709)            \
+  V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0x99887dd2)            \
 
 #define ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V)                                  \
   CORE_LIB_INTRINSIC_LIST(V)                                                   \
@@ -405,64 +405,64 @@
 
 // A list of core functions that internally dispatch based on received id.
 #define POLYMORPHIC_TARGET_LIST(V)                                             \
-  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd)                             \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4214c)                   \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb253)                 \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f)              \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0)
+  V(_StringBase, [], StringBaseCharAt, 0x6c55f9a1)                             \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x30688af4)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x31c4acea)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x4885450f)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x4a06a579)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x335cdbca)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x33a21d3b)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0x10a56ebf)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x46a02819)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe425bcd3)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf3595200)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xb3cc1803)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0xbe4aee59)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0x89b17e2a)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0x5781f1d0)                   \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0x630e7aaf)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0x764a82d7)                 \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0x6602e5c8)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0x618ede3a)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0x70f58a02)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0x826f6c8d)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2761c274)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x1b858d66)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x9e2320c0)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xfa1f5cf1)              \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x8177627e)
 
 // List of recognized list factories:
 // (factory-name-symbol, class-name-string, constructor-name-string,
 //  result-cid, fingerprint).
 #define RECOGNIZED_LIST_FACTORY_LIST(V)                                        \
-  V(_ListFactory, _List, ., kArrayCid, 0x6de199c0)                             \
-  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x871c7eb6)                 \
-  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x045b9063)             \
+  V(_ListFactory, _List, ., kArrayCid, 0x4c9d39e2)                             \
+  V(_ListFilledFactory, _List, .filled, kArrayCid, 0xaf758106)                 \
+  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0xff53e115)             \
   V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid,           \
-    0xdc1f9e09)                                                                \
+    0xa61fbeb9)                                                                \
   V(_GrowableListFilledFactory, _GrowableList, .filled,                        \
-    kGrowableObjectArrayCid, 0xbc894d36)                                       \
+    kGrowableObjectArrayCid, 0x27a28286)                                       \
   V(_GrowableListGenerateFactory, _GrowableList, .generate,                    \
-    kGrowableObjectArrayCid, 0xf6fbbee3)                                       \
+    kGrowableObjectArrayCid, 0x60b98295)                                       \
   V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
-    0x00be5947)                                                                \
-  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad8400)        \
-  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6787)     \
+    0x1947d8a1)                                                                \
+  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x934e97a2)        \
+  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x7eea24fb)     \
   V(_Uint8ClampedArrayFactory, Uint8ClampedList, .,                            \
-    kTypedDataUint8ClampedArrayCid, 0x1ed9320d)                                \
-  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8632b)     \
-  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f762)  \
-  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56498)     \
-  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deac3)  \
-  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c767)     \
-  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669770)  \
+    kTypedDataUint8ClampedArrayCid, 0xba98ab35)                                \
+  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x54af9dd7)     \
+  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0xc3859080)  \
+  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x3e52ca0a)     \
+  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xdbbb093f)  \
+  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x560fc11b)     \
+  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x02b7f232)  \
   V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid,           \
-    0x09ede849)                                                                \
+    0x321abc79)                                                                \
   V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid,           \
-    0x8b65b9f6)                                                                \
+    0xdf9d206c)                                                                \
   V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid,     \
-    0xb2a9e700)
+    0xa0de94a2)
 
 // clang-format on
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 3849287..3f9b43f 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -361,6 +361,12 @@
           "IsolateGroup::type_arguments_canonicalization_mutex_")),
       subtype_test_cache_mutex_(
           NOT_IN_PRODUCT("IsolateGroup::subtype_test_cache_mutex_")),
+      megamorphic_table_mutex_(
+          NOT_IN_PRODUCT("IsolateGroup::megamorphic_table_mutex_")),
+      type_feedback_mutex_(
+          NOT_IN_PRODUCT("IsolateGroup::type_feedback_mutex_")),
+      patchable_call_mutex_(
+          NOT_IN_PRODUCT("IsolateGroup::patchable_call_mutex_")),
       program_lock_(new SafepointRwLock()),
       active_mutators_monitor_(new Monitor()),
       max_active_mutators_(Scavenger::MaxMutatorThreadCount()) {
@@ -1648,9 +1654,6 @@
       mutex_(NOT_IN_PRODUCT("Isolate::mutex_")),
       constant_canonicalization_mutex_(
           NOT_IN_PRODUCT("Isolate::constant_canonicalization_mutex_")),
-      megamorphic_table_mutex_(
-          NOT_IN_PRODUCT("Isolate::megamorphic_table_mutex_")),
-      type_feedback_mutex_(NOT_IN_PRODUCT("Isolate::type_feedback_mutex_")),
       kernel_data_lib_cache_mutex_(
           NOT_IN_PRODUCT("Isolate::kernel_data_lib_cache_mutex_")),
       kernel_data_class_cache_mutex_(
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 77991a9..a98d48b 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -424,6 +424,9 @@
     return &type_arguments_canonicalization_mutex_;
   }
   Mutex* subtype_test_cache_mutex() { return &subtype_test_cache_mutex_; }
+  Mutex* megamorphic_table_mutex() { return &megamorphic_table_mutex_; }
+  Mutex* type_feedback_mutex() { return &type_feedback_mutex_; }
+  Mutex* patchable_call_mutex() { return &patchable_call_mutex_; }
 
 #if defined(DART_PRECOMPILED_RUNTIME)
   Mutex* unlinked_call_map_mutex() { return &unlinked_call_map_mutex_; }
@@ -722,6 +725,9 @@
   Mutex type_canonicalization_mutex_;
   Mutex type_arguments_canonicalization_mutex_;
   Mutex subtype_test_cache_mutex_;
+  Mutex megamorphic_table_mutex_;
+  Mutex type_feedback_mutex_;
+  Mutex patchable_call_mutex_;
 
 #if defined(DART_PRECOMPILED_RUNTIME)
   Mutex unlinked_call_map_mutex_;
@@ -964,9 +970,6 @@
   Mutex* constant_canonicalization_mutex() {
     return &constant_canonicalization_mutex_;
   }
-  Mutex* megamorphic_table_mutex() { return &megamorphic_table_mutex_; }
-  Mutex* type_feedback_mutex() { return &type_feedback_mutex_; }
-
   Mutex* kernel_data_lib_cache_mutex() { return &kernel_data_lib_cache_mutex_; }
   Mutex* kernel_data_class_cache_mutex() {
     return &kernel_data_class_cache_mutex_;
@@ -1601,8 +1604,6 @@
   Simulator* simulator_ = nullptr;
   Mutex mutex_;                            // Protects compiler stats.
   Mutex constant_canonicalization_mutex_;  // Protects const canonicalization.
-  Mutex megamorphic_table_mutex_;
-  Mutex type_feedback_mutex_;
   Mutex kernel_data_lib_cache_mutex_;
   Mutex kernel_data_class_cache_mutex_;
   Mutex kernel_constants_mutex_;
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 7d5e9c5..0805ac0 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 50;
-static const uint32_t kMaxSupportedKernelFormatVersion = 50;
+static const uint32_t kMinSupportedKernelFormatVersion = 51;
+static const uint32_t kMaxSupportedKernelFormatVersion = 51;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/megamorphic_cache_table.cc b/runtime/vm/megamorphic_cache_table.cc
index 7a1b7f6..2e7d1b3 100644
--- a/runtime/vm/megamorphic_cache_table.cc
+++ b/runtime/vm/megamorphic_cache_table.cc
@@ -17,7 +17,7 @@
                                                   const String& name,
                                                   const Array& descriptor) {
   Isolate* isolate = thread->isolate();
-  SafepointMutexLocker ml(isolate->megamorphic_table_mutex());
+  SafepointMutexLocker ml(thread->isolate_group()->megamorphic_table_mutex());
 
   ASSERT(name.IsSymbol());
   // TODO(rmacnak): ASSERT(descriptor.IsCanonical());
@@ -46,7 +46,7 @@
 
 void MegamorphicCacheTable::PrintSizes(Isolate* isolate) {
   auto thread = Thread::Current();
-  SafepointMutexLocker ml(thread->isolate()->megamorphic_table_mutex());
+  SafepointMutexLocker ml(thread->isolate_group()->megamorphic_table_mutex());
 
   StackZone zone(thread);
   intptr_t size = 0;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 3f6ff74..56e839d 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -15239,7 +15239,7 @@
 void ICData::EnsureHasCheck(const GrowableArray<intptr_t>& class_ids,
                             const Function& target,
                             intptr_t count) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
 
   if (FindCheck(class_ids) != -1) return;
   AddCheckInternal(class_ids, target, count);
@@ -15248,14 +15248,15 @@
 void ICData::AddCheck(const GrowableArray<intptr_t>& class_ids,
                       const Function& target,
                       intptr_t count) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
   AddCheckInternal(class_ids, target, count);
 }
 
 void ICData::AddCheckInternal(const GrowableArray<intptr_t>& class_ids,
                               const Function& target,
                               intptr_t count) const {
-  ASSERT(Isolate::Current()->type_feedback_mutex()->IsOwnedByCurrentThread());
+  ASSERT(
+      IsolateGroup::Current()->type_feedback_mutex()->IsOwnedByCurrentThread());
 
   ASSERT(!is_tracking_exactness());
   ASSERT(!target.IsNull());
@@ -15343,7 +15344,7 @@
                                     const Function& target,
                                     intptr_t count,
                                     StaticTypeExactnessState exactness) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
 
   GrowableArray<intptr_t> class_ids(1);
   class_ids.Add(receiver_class_id);
@@ -15356,7 +15357,7 @@
                               const Function& target,
                               intptr_t count,
                               StaticTypeExactnessState exactness) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
   AddReceiverCheckInternal(receiver_class_id, target, count, exactness);
 }
 
@@ -17174,7 +17175,7 @@
 
 void MegamorphicCache::EnsureContains(const Smi& class_id,
                                       const Object& target) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
 
   if (LookupLocked(class_id) == Object::null()) {
     InsertLocked(class_id, target);
@@ -17195,15 +17196,16 @@
 }
 
 ObjectPtr MegamorphicCache::Lookup(const Smi& class_id) const {
-  SafepointMutexLocker ml(Isolate::Current()->type_feedback_mutex());
+  SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
   return LookupLocked(class_id);
 }
 
 ObjectPtr MegamorphicCache::LookupLocked(const Smi& class_id) const {
   auto thread = Thread::Current();
+  auto isolate_group = thread->isolate_group();
   auto zone = thread->zone();
   ASSERT(thread->IsMutatorThread());
-  ASSERT(thread->isolate()->type_feedback_mutex()->IsOwnedByCurrentThread());
+  ASSERT(isolate_group->type_feedback_mutex()->IsOwnedByCurrentThread());
 
   const auto& backing_array = Array::Handle(zone, buckets());
   intptr_t id_mask = mask();
@@ -17225,7 +17227,7 @@
 void MegamorphicCache::InsertLocked(const Smi& class_id,
                                     const Object& target) const {
   auto isolate_group = IsolateGroup::Current();
-  ASSERT(Isolate::Current()->type_feedback_mutex()->IsOwnedByCurrentThread());
+  ASSERT(isolate_group->type_feedback_mutex()->IsOwnedByCurrentThread());
 
   // As opposed to ICData we are stopping mutator threads from other isolates
   // while modifying the megamorphic cache, since updates are not atomic.
@@ -17242,17 +17244,20 @@
 }
 
 void MegamorphicCache::EnsureCapacityLocked() const {
-  ASSERT(Isolate::Current()->type_feedback_mutex()->IsOwnedByCurrentThread());
+  auto thread = Thread::Current();
+  auto zone = thread->zone();
+  auto isolate_group = thread->isolate_group();
+  ASSERT(isolate_group->type_feedback_mutex()->IsOwnedByCurrentThread());
 
   intptr_t old_capacity = mask() + 1;
   double load_limit = kLoadFactor * static_cast<double>(old_capacity);
   if (static_cast<double>(filled_entry_count() + 1) > load_limit) {
-    const Array& old_buckets = Array::Handle(buckets());
+    const Array& old_buckets = Array::Handle(zone, buckets());
     intptr_t new_capacity = old_capacity * 2;
     const Array& new_buckets =
-        Array::Handle(Array::New(kEntryLength * new_capacity));
+        Array::Handle(zone, Array::New(kEntryLength * new_capacity));
 
-    auto& target = Object::Handle();
+    auto& target = Object::Handle(zone);
     for (intptr_t i = 0; i < new_capacity; ++i) {
       SetEntry(new_buckets, i, smi_illegal_cid(), target);
     }
@@ -17261,7 +17266,7 @@
     set_filled_entry_count(0);
 
     // Rehash the valid entries.
-    Smi& class_id = Smi::Handle();
+    Smi& class_id = Smi::Handle(zone);
     for (intptr_t i = 0; i < old_capacity; ++i) {
       class_id ^= GetClassId(old_buckets, i);
       if (class_id.Value() != kIllegalCid) {
@@ -17274,7 +17279,9 @@
 
 void MegamorphicCache::InsertEntryLocked(const Smi& class_id,
                                          const Object& target) const {
-  ASSERT(Isolate::Current()->type_feedback_mutex()->IsOwnedByCurrentThread());
+  auto thread = Thread::Current();
+  auto isolate_group = thread->isolate_group();
+  ASSERT(isolate_group->type_feedback_mutex()->IsOwnedByCurrentThread());
 
   ASSERT(Thread::Current()->IsMutatorThread());
   ASSERT(static_cast<double>(filled_entry_count() + 1) <=
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index b5f1d00..b05b00d 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -1361,6 +1361,8 @@
     return target_function.raw();
   }
 
+  SafepointMutexLocker ml(thread->isolate_group()->patchable_call_mutex());
+
   return InlineCacheMissHandlerGivenTargetFunction(args, ic_data, 1,
                                                    target_function);
 }
@@ -1646,8 +1648,8 @@
       code = StubCode::MonomorphicSmiableCheck().raw();
     }
   }
-  CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-      thread_, caller_frame_->pc(), caller_code_, object, code);
+  CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_, object,
+                                     code);
 
   // Return the ICData. The miss stub will jump to continue in the IC lookup
   // stub.
@@ -1765,8 +1767,8 @@
     cache.set_lower_limit(lower);
     cache.set_upper_limit(upper);
     const Code& stub = StubCode::SingleTargetCall();
-    CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-        thread_, caller_frame_->pc(), caller_code_, cache, stub);
+    CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_, cache,
+                                       stub);
     // Return the ICData. The miss stub will jump to continue in the IC call
     // stub.
     arguments_.SetArgAt(0, StubCode::ICCallThroughCode());
@@ -1776,8 +1778,8 @@
 
   // Patch to call through stub.
   const Code& stub = StubCode::ICCallThroughCode();
-  CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-      thread_, caller_frame_->pc(), caller_code_, ic_data, stub);
+  CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_, ic_data,
+                                     stub);
 
   // Return the ICData. The miss stub will jump to continue in the IC lookup
   // stub.
@@ -1794,25 +1796,21 @@
   const Code& stub = ic_data.is_tracking_exactness()
                          ? StubCode::OneArgCheckInlineCacheWithExactnessCheck()
                          : StubCode::OneArgCheckInlineCache();
-  CodePatcher::PatchInstanceCallAtWithMutatorsStopped(
-      thread_, caller_frame_->pc(), caller_code_, ic_data, stub);
+  CodePatcher::PatchInstanceCallAt(caller_frame_->pc(), caller_code_, ic_data,
+                                   stub);
   if (FLAG_trace_ic) {
     OS::PrintErr("Instance call at %" Px
                  " switching to polymorphic dispatch, %s\n",
                  caller_frame_->pc(), ic_data.ToCString());
   }
 
-  // ICData can be shared between unoptimized and optimized code, so beware that
-  // the new receiver class may have already been added through the optimized
-  // code.
-  if (!ic_data.HasReceiverClassId(receiver_.GetClassId())) {
-    GrowableArray<const Instance*> args(1);
-    args.Add(&receiver_);
-    // Don't count during insertion because the IC stub we continue through will
-    // do an increment.
-    InlineCacheMissHandlerGivenTargetFunction(args, ic_data, /*count=*/0,
-                                              target_function);
-  }
+  // Don't count during insertion because the IC stub we continue through will
+  // do an increment.
+  GrowableArray<const Instance*> args(1);
+  args.Add(&receiver_);
+  InlineCacheMissHandlerGivenTargetFunction(args, ic_data, /*count=*/0,
+                                            target_function);
+
   arguments_.SetArgAt(0, stub);
   arguments_.SetReturn(ic_data);
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
@@ -1848,8 +1846,8 @@
 
   // Call site is not single target, switch to call using ICData.
   const Code& stub = StubCode::ICCallThroughCode();
-  CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-      thread_, caller_frame_->pc(), caller_code_, ic_data, stub);
+  CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_, ic_data,
+                                     stub);
 
   // Return the ICData. The single target stub will jump to continue in the
   // IC call stub.
@@ -1893,25 +1891,21 @@
     const Smi& expected_cid =
         Smi::Handle(zone_, Smi::New(receiver_.GetClassId()));
     ASSERT(target_code.HasMonomorphicEntry());
-    CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-        thread_, caller_frame_->pc(), caller_code_, expected_cid, target_code);
+    CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_,
+                                       expected_cid, target_code);
     arguments_.SetArgAt(0, target_code);
     arguments_.SetReturn(expected_cid);
   } else {
     // IC entry might have been added while we waited to get into runtime.
-    GrowableArray<intptr_t> class_ids(1);
-    class_ids.Add(receiver_.GetClassId());
-    if (ic_data.FindCheck(class_ids) == -1) {
-      ic_data.AddReceiverCheck(receiver_.GetClassId(), target_function);
-    }
+    ic_data.EnsureHasReceiverCheck(receiver_.GetClassId(), target_function);
     if (number_of_checks > FLAG_max_polymorphic_checks) {
       // Switch to megamorphic call.
       const MegamorphicCache& cache = MegamorphicCache::Handle(
           zone_, MegamorphicCacheTable::Lookup(thread_, name, descriptor));
       const Code& stub = StubCode::MegamorphicCall();
 
-      CodePatcher::PatchSwitchableCallAtWithMutatorsStopped(
-          thread_, caller_frame_->pc(), caller_code_, cache, stub);
+      CodePatcher::PatchSwitchableCallAt(caller_frame_->pc(), caller_code_,
+                                         cache, stub);
       arguments_.SetArgAt(0, stub);
       arguments_.SetReturn(cache);
     } else {
@@ -2087,40 +2081,42 @@
   const Function& caller_function =
       Function::Handle(zone, caller_frame->LookupDartFunction());
 
-  Object& old_data = Object::Handle(zone);
-  Code& old_code = Code::Handle(zone);
+  SwitchableCallHandler handler(thread, receiver, arguments, caller_frame,
+                                caller_code, caller_function);
 
+  // Find out actual target (which can be time consuminmg) without holding any
+  // locks.
+  Object& old_data = Object::Handle(zone);
 #if defined(DART_PRECOMPILED_RUNTIME)
-  // Grab old_data and do potentially long-running step of resolving the
-  // target function before we stop mutators.
-  // This will reduce amount of time spent with all mutators are stopped
-  // hopefully leaving only code patching to be done then.
   old_data =
       CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(), caller_code);
 #else
-  old_code ^= CodePatcher::GetInstanceCallAt(caller_frame->pc(), caller_code,
-                                             &old_data);
+  CodePatcher::GetInstanceCallAt(caller_frame->pc(), caller_code, &old_data);
 #endif
-  SwitchableCallHandler handler(thread, receiver, arguments, caller_frame,
-                                caller_code, caller_function);
   const Function& target_function =
       Function::Handle(zone, handler.ResolveTargetFunction(old_data));
-  thread->isolate_group()->RunWithStoppedMutators(
-      [&]() {
+
+  {
+    // We ensure any transition in a patchable calls are done in an atomic
+    // manner, we ensure we always transition forward (e.g. Monomorphic ->
+    // Polymorphic).
+    //
+    // Mutators are only stopped if we actually need to patch a patchable call.
+    // We may not do that if we e.g. just add one more check to an ICData.
+    SafepointMutexLocker ml(thread->isolate_group()->patchable_call_mutex());
+
+    auto& old_code = Code::Handle(zone);
 #if defined(DART_PRECOMPILED_RUNTIME)
-        old_data = CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(),
-                                                        caller_code);
-#if defined(DEBUG)
-        old_code ^= CodePatcher::GetSwitchableCallTargetAt(caller_frame->pc(),
-                                                           caller_code);
-#endif
+    old_data =
+        CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(), caller_code);
+    DEBUG_ONLY(old_code = CodePatcher::GetSwitchableCallTargetAt(
+                   caller_frame->pc(), caller_code));
 #else
-        old_code ^= CodePatcher::GetInstanceCallAt(caller_frame->pc(),
-                                                   caller_code, &old_data);
+    old_code ^= CodePatcher::GetInstanceCallAt(caller_frame->pc(), caller_code,
+                                               &old_data);
 #endif
-        handler.HandleMiss(old_data, old_code, target_function);
-      },
-      /*use_force_growth=*/true);
+    handler.HandleMiss(old_data, old_code, target_function);
+  }
 }
 
 // Used to find the correct receiver and function to invoke or to fall back to
diff --git a/sdk/lib/_internal/vm/lib/array_patch.dart b/sdk/lib/_internal/vm/lib/array_patch.dart
index 51fe288..df03cf6 100644
--- a/sdk/lib/_internal/vm/lib/array_patch.dart
+++ b/sdk/lib/_internal/vm/lib/array_patch.dart
@@ -30,43 +30,60 @@
 
   @patch
   factory List.from(Iterable elements, {bool growable: true}) {
-    if (elements is EfficientLengthIterable<E>) {
-      int length = elements.length;
-      var list = growable ? new _GrowableList<E>(length) : new _List<E>(length);
-      if (length > 0) {
-        // Avoid creating iterator unless necessary.
-        int i = 0;
-        for (var element in elements) {
-          list[i++] = element;
-        }
-      }
-      return list;
-    }
     // If elements is an Iterable<E>, we won't need a type-test for each
-    // element. In the "common case" that elements is an Iterable<E>, this
-    // replaces a type-test on every element with a single type-test before
-    // starting the loop.
+    // element.
     if (elements is Iterable<E>) {
-      List<E> list = new _GrowableList<E>(0);
-      for (E e in elements) {
-        list.add(e);
-      }
-      if (growable) return list;
-      return makeListFixedLength(list);
-    } else {
-      List<E> list = new _GrowableList<E>(0);
-      for (E e in elements) {
-        list.add(e);
-      }
-      if (growable) return list;
-      return makeListFixedLength(list);
+      return List.of(elements, growable: growable);
     }
+
+    List<E> list = new _GrowableList<E>(0);
+    for (E e in elements) {
+      list.add(e);
+    }
+    if (growable) return list;
+    return makeListFixedLength(list);
   }
 
   @patch
   factory List.of(Iterable<E> elements, {bool growable: true}) {
-    // TODO(32937): Specialize to benefit from known element type.
-    return List.from(elements, growable: growable);
+    final cid = ClassID.getID(elements);
+    final isVMList = (cid == ClassID.cidArray) ||
+        (cid == ClassID.cidGrowableObjectArray) ||
+        (cid == ClassID.cidImmutableArray);
+
+    if (isVMList) {
+      final ListBase<E> elementsAsList = elements as ListBase<E>;
+      final int length = elementsAsList.length;
+      final list =
+          growable ? new _GrowableList<E>(length) : new _List<E>(length);
+      if (length > 0) {
+        for (int i = 0; i < length; i++) {
+          list[i] = elementsAsList[i];
+        }
+      }
+      return list;
+    }
+
+    if (elements is EfficientLengthIterable) {
+      final int length = elements.length;
+      final list =
+          growable ? new _GrowableList<E>(length) : new _List<E>(length);
+      if (length > 0) {
+        int i = 0;
+        for (var element in elements) {
+          list[i++] = element;
+        }
+        if (i != length) throw ConcurrentModificationError(elements);
+      }
+      return list;
+    }
+
+    final list = <E>[];
+    for (var elements in elements) {
+      list.add(elements);
+    }
+    if (growable) return list;
+    return makeListFixedLength(list);
   }
 
   @patch
diff --git a/tools/VERSION b/tools/VERSION
index 1fa2f63..04bf624 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 106
+PRERELEASE 107
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart
index e177485..ad73069 100644
--- a/tools/package_deps/bin/package_deps.dart
+++ b/tools/package_deps/bin/package_deps.dart
@@ -4,10 +4,6 @@
 import 'package:path/path.dart' as path;
 import 'package:yaml/yaml.dart' as yaml;
 
-// TODO(devoncarew): Validate that publishable packages don't use relative sdk
-// paths in their pubspecs.
-
-// TODO(devoncarew): Find unused entries in the DEPS file.
 const validateDEPS = false;
 
 void main(List<String> arguments) {
@@ -20,6 +16,15 @@
     exit(1);
   }
 
+  print('To run this script, execute:');
+  print('');
+  print('  dart tools/package_deps/bin/package_deps.dart');
+  print('');
+  print('See pkg/README.md for more information.');
+  print('');
+  print('----');
+  print('');
+
   // locate all pkg/ packages
   final packages = <Package>[];
   for (var entity in Directory('pkg').listSync()) {
@@ -31,6 +36,8 @@
     }
   }
 
+  List<String> pkgPackages = packages.map((p) => p.packageName).toList();
+
   // Manually added directories (outside of pkg/).
   List<String> alsoValidate = [
     'tools/package_deps',
@@ -49,7 +56,7 @@
     print('validating ${package.dir}'
         '${package.publishable ? ' [publishable]' : ''}');
 
-    if (!package.validate(logger)) {
+    if (!package.validate(logger, pkgPackages)) {
       validateFailure = true;
     }
 
@@ -59,19 +66,22 @@
   // Read and display info about the sdk DEPS file.
   if (validateDEPS) {
     print('SDK DEPS');
+    print('');
+
     var sdkDeps = SdkDeps(File('DEPS'));
     sdkDeps.parse();
-    print('');
-    print('packages:');
-    for (var pkg in sdkDeps.pkgs) {
-      print('  package:$pkg');
+
+    List<String> deps = [...sdkDeps.pkgs, ...sdkDeps.testedPkgs]..sort();
+    for (var pkg in deps) {
+      final tested = sdkDeps.testedPkgs.contains(pkg);
+      print('package:$pkg${tested ? ' [tested]' : ''}');
     }
 
-    print('');
-    print('tested packages:');
-    for (var pkg in sdkDeps.testedPkgs) {
-      print('  package:$pkg');
-    }
+    // TODO(devoncarew): Validate that published packages solve against the
+    // versions brought in from the DEPS file.
+
+    // TODO(devoncarew): Find unused entries in the DEPS file.
+
   }
 
   if (validateFailure) {
@@ -93,13 +103,16 @@
 
   String get packageName => _packageName;
   Set<String> _declaredDependencies;
+  List<PubDep> _declaredPubDeps;
   Set<String> _declaredDevDependencies;
+  List<PubDep> _declaredDevPubDeps;
 
   List<String> get regularDependencies => _regularDependencies.toList()..sort();
 
   List<String> get devDependencies => _devDependencies.toList()..sort();
 
   bool _publishToNone;
+
   bool get publishable => !_publishToNone;
 
   @override
@@ -111,9 +124,9 @@
   @override
   int compareTo(Package other) => dir.compareTo(other.dir);
 
-  bool validate(Logger logger) {
+  bool validate(Logger logger, List<String> pkgPackages) {
     _parseImports();
-    return _validatePubspecDeps(logger);
+    return _validatePubspecDeps(logger, pkgPackages);
   }
 
   void _parseImports() {
@@ -155,21 +168,34 @@
     _packageName = docContents['name'];
     _publishToNone = docContents['publish_to'] == 'none';
 
+    _declaredPubDeps = [];
     if (docContents['dependencies'] != null) {
       _declaredDependencies =
           Set<String>.from(docContents['dependencies'].keys);
+
+      var deps = docContents['dependencies'];
+      for (var package in deps.keys) {
+        _declaredPubDeps.add(PubDep.parse(package, deps[package]));
+      }
     } else {
       _declaredDependencies = {};
     }
+
+    _declaredDevPubDeps = [];
     if (docContents['dev_dependencies'] != null) {
       _declaredDevDependencies =
           Set<String>.from(docContents['dev_dependencies'].keys);
+
+      var deps = docContents['dev_dependencies'];
+      for (var package in deps.keys) {
+        _declaredDevPubDeps.add(PubDep.parse(package, deps[package]));
+      }
     } else {
       _declaredDevDependencies = {};
     }
   }
 
-  bool _validatePubspecDeps(Logger logger) {
+  bool _validatePubspecDeps(Logger logger, List<String> pkgPackages) {
     var fail = false;
 
     if (dirName != packageName) {
@@ -240,6 +266,47 @@
       fail = true;
     }
 
+    // Validate that we don't have relative deps into third_party.
+    // TODO(devoncarew): This is currently just enforced for publishable
+    // packages.
+    if (publishable) {
+      for (PubDep dep in [..._declaredPubDeps, ..._declaredDevPubDeps]) {
+        if (dep is PathPubDep) {
+          var path = dep.path;
+
+          if (path.contains('third_party/pkg_tested/') ||
+              path.contains('third_party/pkg/')) {
+            out('  Prefer a semver dependency for packages brought in via DEPS:');
+            out('    $dep');
+            fail = true;
+          }
+        }
+      }
+    }
+
+    // Validate that published packages don't use path deps.
+    if (publishable) {
+      for (PubDep dep in _declaredPubDeps) {
+        if (dep is PathPubDep) {
+          out('  Published packages should use semver deps:');
+          out('    $dep');
+          fail = true;
+        }
+      }
+    }
+
+    // Validate that non-published packages use relative a (relative) path dep
+    // for pkg/ packages.
+    if (!publishable) {
+      for (PubDep dep in [..._declaredPubDeps, ..._declaredDevPubDeps]) {
+        if (pkgPackages.contains(dep.name) && dep is! PathPubDep) {
+          out('  Prefer a relative path dep for pkg/ packages:');
+          out('    $dep');
+          fail = true;
+        }
+      }
+    }
+
     if (!fail) {
       print('  No issues.');
     }
@@ -361,3 +428,45 @@
     testedPkgs.sort();
   }
 }
+
+abstract class PubDep {
+  final String name;
+
+  PubDep(this.name);
+
+  String toString() => name;
+
+  static PubDep parse(String name, Object dep) {
+    if (dep is String) {
+      return SemverPubDep(name, dep);
+    } else if (dep is Map) {
+      if (dep.containsKey('path')) {
+        return PathPubDep(name, dep['path']);
+      } else {
+        return UnhandledPubDep(name);
+      }
+    } else {
+      return UnhandledPubDep(name);
+    }
+  }
+}
+
+class SemverPubDep extends PubDep {
+  final String value;
+
+  SemverPubDep(String name, this.value) : super(name);
+
+  String toString() => '$name: $value';
+}
+
+class PathPubDep extends PubDep {
+  final String path;
+
+  PathPubDep(String name, this.path) : super(name);
+
+  String toString() => '$name: $path';
+}
+
+class UnhandledPubDep extends PubDep {
+  UnhandledPubDep(String name) : super(name);
+}
