diff --git a/pkg/analysis_server/lib/src/services/completion/dart/relevance_tables.g.dart b/pkg/analysis_server/lib/src/services/completion/dart/relevance_tables.g.dart
index cb79f01..25f3857 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/relevance_tables.g.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/relevance_tables.g.dart
@@ -11,9 +11,7 @@
 import 'package:analysis_server/src/services/completion/dart/probability_range.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 
-/// A table keyed by completion location and element kind whose values are the
-/// ranges of the relevance of those element kinds in those locations.
-const elementKindRelevance = {
+const defaultElementKindRelevance = {
   'Annotation_name': {
     ElementKind.CONSTRUCTOR: ProbabilityRange(lower: 0.000, upper: 0.041),
     ElementKind.TOP_LEVEL_VARIABLE:
@@ -1029,9 +1027,7 @@
   },
 };
 
-/// A table keyed by completion location and keyword whose values are the
-/// ranges of the relevance of those keywords in those locations.
-const keywordRelevance = {
+const defaultKeywordRelevance = {
   'ArgumentList_annotation_named': {
     'false': ProbabilityRange(lower: 0.159, upper: 0.517),
     'true': ProbabilityRange(lower: 0.517, upper: 1.000),
@@ -1557,3 +1553,13 @@
     'await': ProbabilityRange(lower: 0.049, upper: 0.073),
   },
 };
+
+/// A table keyed by completion location and element kind whose values are the
+/// ranges of the relevance of those element kinds in those locations.
+Map<String, Map<ElementKind, ProbabilityRange>> elementKindRelevance =
+    defaultElementKindRelevance;
+
+/// A table keyed by completion location and keyword whose values are the
+/// ranges of the relevance of those keywords in those locations.
+Map<String, Map<String, ProbabilityRange>> keywordRelevance =
+    defaultKeywordRelevance;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index eeecbf0..e8bc6be 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -180,8 +180,9 @@
     try {
       var processor = FixProcessor(context);
       var fixes = await processor.compute();
-      // todo (pq): add fixes from FixInFileProcessor
-      // https://github.com/dart-lang/sdk/issues/45026
+      var fixInFileProcessor = FixInFileProcessor(context);
+      var fixInFileFixes = await fixInFileProcessor.compute();
+      fixes.addAll(fixInFileFixes);
       return fixes;
     } on CancelCorrectionException {
       return const <Fix>[];
@@ -286,13 +287,13 @@
         }
       }
     } else {
-      // todo (pq): update to a new nonLintProducerMap2
-      var generators = FixProcessor.nonLintProducerMap[errorCode];
-      if (generators != null) {
-        if (generators != null) {
-          producers.addAll(generators);
-        }
-      }
+      // todo (pq): add support for non-lint producers and update to a new nonLintProducerMap2
+      // var generators = FixProcessor.nonLintProducerMap[errorCode];
+      // if (generators != null) {
+      //   if (generators != null) {
+      //     producers.addAll(generators);
+      //   }
+      // }
       // todo (pq): consider support for multiGenerators
     }
     return producers;
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 38e22d5..2a9e75d 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -13,6 +13,8 @@
 import 'package:analysis_server/src/services/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/probability_range.dart';
+import 'package:analysis_server/src/services/completion/dart/relevance_tables.g.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
 import 'package:analysis_server/src/status/pages.dart';
@@ -598,6 +600,20 @@
 
   CompletionMetricsComputer(this.rootPath, this.options);
 
+  /// Compare the relevance [tables] to the default relevance tables.
+  void compareRelevanceTables(List<RelevanceTables> tables) {
+    assert(tables.isNotEmpty);
+    for (var tablePair in tables) {
+      targetMetrics.add(CompletionMetrics(tablePair.name, enableFunction: () {
+        elementKindRelevance = tablePair.elementKindRelevance;
+        keywordRelevance = tablePair.keywordRelevance;
+      }, disableFunction: () {
+        elementKindRelevance = defaultElementKindRelevance;
+        keywordRelevance = defaultKeywordRelevance;
+      }));
+    }
+  }
+
   Future<int> computeMetrics() async {
     resultCode = 0;
     // To compare two or more changes to completions, add a `CompletionMetrics`
@@ -605,6 +621,11 @@
     targetMetrics.add(CompletionMetrics('shipping',
         enableFunction: null, disableFunction: null));
 
+    // To compare two or more relevance tables, uncomment the line below and
+    // add the `RelevanceTable`s to the list. The default relevance tables
+    // should not be included in the list.
+//     compareRelevanceTables([]);
+
     final collection = AnalysisContextCollection(
       includedPaths: [rootPath],
       resourceProvider: PhysicalResourceProvider.INSTANCE,
@@ -1760,6 +1781,22 @@
   }
 }
 
+/// A description of a pair of relevance tables to be used in an experiment.
+class RelevanceTables {
+  /// The name of the experiment using the tables.
+  final String name;
+
+  /// The relevance table used for element kinds.
+  final Map<String, Map<protocol.ElementKind, ProbabilityRange>>
+      elementKindRelevance;
+
+  /// The relevance table used for keywords.
+  final Map<String, Map<String, ProbabilityRange>> keywordRelevance;
+
+  /// Initialize a newly created description of a pair of relevance tables.
+  RelevanceTables(this.name, this.elementKindRelevance, this.keywordRelevance);
+}
+
 /// The information being remembered about an individual suggestion.
 class SuggestionData {
   /// The suggestion that was produced.
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index b1d7d79..4b2ee62e 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -1542,14 +1542,13 @@
     writeFileHeader();
     writeElementKindTable(data);
     writeKeywordTable(data);
+    writeFileFooter();
   }
 
   void writeElementKindTable(RelevanceData data) {
     sink.writeln();
     sink.write('''
-/// A table keyed by completion location and element kind whose values are the
-/// ranges of the relevance of those element kinds in those locations.
-const elementKindRelevance = {
+const defaultElementKindRelevance = {
 ''');
 
     var byKind = data.byKind;
@@ -1589,6 +1588,20 @@
     sink.writeln('};');
   }
 
+  void writeFileFooter() {
+    sink.write('''
+/// A table keyed by completion location and element kind whose values are the
+/// ranges of the relevance of those element kinds in those locations.
+Map<String, Map<ElementKind, ProbabilityRange>> elementKindRelevance =
+    defaultElementKindRelevance;
+
+/// A table keyed by completion location and keyword whose values are the
+/// ranges of the relevance of those keywords in those locations.
+Map<String, Map<String, ProbabilityRange>> keywordRelevance =
+    defaultKeywordRelevance;
+''');
+  }
+
   void writeFileHeader() {
     sink.write('''
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
@@ -1609,9 +1622,7 @@
   void writeKeywordTable(RelevanceData data) {
     sink.writeln();
     sink.write('''
-/// A table keyed by completion location and keyword whose values are the
-/// ranges of the relevance of those keywords in those locations.
-const keywordRelevance = {
+const defaultKeywordRelevance = {
 ''');
 
     var byKind = data.byKind;
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 0c6052a..cb27bce 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -13,11 +13,8 @@
 import 'package:analyzer/src/context/context_root.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/analysis/context_locator.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart'
     show AnalysisDriver, AnalysisDriverScheduler;
-import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'
-    as api;
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
@@ -139,22 +136,6 @@
       retainDataForTesting: retainDataForTesting,
     );
 
-    // Set API AnalysisContext for the driver.
-    var apiContextRoots = ContextLocatorImpl(
-      resourceProvider: resourceProvider,
-    ).locateRoots(
-      includedPaths: [contextRoot.root],
-      excludedPaths: contextRoot.exclude,
-      overrideWorkspace: workspace,
-    );
-    driver.configure(
-      analysisContext: api.DriverBasedAnalysisContext(
-        resourceProvider,
-        apiContextRoots.first,
-        driver,
-      ),
-    );
-
     declareVariablesInDriver(driver);
     return driver;
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index 7353694..7ec4bfb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -104,6 +104,8 @@
 
     DriverBasedAnalysisContext context =
         DriverBasedAnalysisContext(resourceProvider, contextRoot, driver);
+    driver.configure(analysisContext: context);
+
     return context;
   }
 
diff --git a/pkg/vm_service/test/capture_stdio_test.dart b/pkg/vm_service/test/capture_stdio_test.dart
new file mode 100644
index 0000000..2edf76c
--- /dev/null
+++ b/pkg/vm_service/test/capture_stdio_test.dart
@@ -0,0 +1,88 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:developer';
+import 'dart:io';
+import 'package:vm_service/vm_service.dart';
+import 'package:test/test.dart';
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+void test() {
+  debugger();
+  print('stdout');
+
+  debugger();
+  print('print');
+
+  debugger();
+  stderr.write('stderr');
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final completer = Completer<void>();
+    late StreamSubscription stdoutSub;
+    stdoutSub = service.onStdoutEvent.listen((event) async {
+      expect(event.kind, EventKind.kWriteEvent);
+      expect(utf8.decode(base64Decode(event.bytes!)), 'stdout');
+      await stdoutSub.cancel();
+      await service.streamCancel(EventStreams.kStdout);
+      completer.complete();
+    });
+    await service.streamListen(EventStreams.kStdout);
+    await service.resume(isolateRef.id!);
+    await completer.future;
+  },
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final completer = Completer<void>();
+    int eventNumber = 1;
+    late StreamSubscription stdoutSub;
+    stdoutSub = service.onStdoutEvent.listen((event) async {
+      expect(event.kind, EventKind.kWriteEvent);
+      final decoded = utf8.decode(base64Decode(event.bytes!));
+
+      if (eventNumber == 1) {
+        expect(decoded, 'print');
+      } else if (eventNumber == 2) {
+        expect(decoded, '\n');
+        await service.streamCancel(EventStreams.kStdout);
+        await stdoutSub.cancel();
+        completer.complete();
+      } else {
+        fail('Unreachable');
+      }
+      eventNumber++;
+    });
+    await service.streamListen(EventStreams.kStdout);
+    await service.resume(isolateRef.id!);
+    await completer.future;
+  },
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final completer = Completer<void>();
+    late StreamSubscription stderrSub;
+    stderrSub = service.onStderrEvent.listen((event) async {
+      expect(event.kind, EventKind.kWriteEvent);
+      expect(utf8.decode(base64Decode(event.bytes!)), 'stderr');
+      await service.streamCancel(EventStreams.kStderr);
+      await stderrSub.cancel();
+      completer.complete();
+    });
+    await service.streamListen(EventStreams.kStderr);
+    await service.resume(isolateRef.id!);
+    await completer.future;
+  },
+];
+
+main(args) => runIsolateTests(
+      args,
+      tests,
+      'capture_stdio_test.dart',
+      testeeConcurrent: test,
+    );
diff --git a/runtime/tests/vm/dart_2/isolates/reload_utils.dart b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
index 36f8fa9..853d2f0 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_utils.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
@@ -25,7 +25,7 @@
     await File(testFile).writeAsString(version);
     final dillFile = path.join(tempDir, 'test.dart.${i++}.dill');
     await compile(testFile, dillFile);
-    dills.add(dillFile);
+    dills.add(Uri.file(dillFile).toString());
   }
   return dills;
 }
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index b026035..ee7a7ec 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4314,9 +4314,6 @@
                                 const char* event_kind,
                                 const uint8_t* bytes,
                                 intptr_t bytes_len) {
-  if (!Service::debug_stream.enabled()) {
-    return;
-  }
   ServiceEvent event(isolate, ServiceEvent::kEmbedder);
   event.set_embedder_kind(event_kind);
   event.set_embedder_stream_id(stream_id);
diff --git a/tools/VERSION b/tools/VERSION
index 2740a21..5ab8887 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 96
+PRERELEASE 97
 PRERELEASE_PATCH 0
\ No newline at end of file
