diff --git a/current_results/README.md b/current_results/README.md
index 3411e6e..ed24728 100644
--- a/current_results/README.md
+++ b/current_results/README.md
@@ -2,7 +2,11 @@
 
 This server runs on Google Cloud Run, and provides the most recent test results
 from the Dart CI (continuous integration) testing visible at
-https://ci.chromium.org/p/dart/g/be/console
+https://ci.chromium.org/p/dart/g/be/console.
+
+This service is the backend for https://dart-current-results.web.app/
+which provides a filterable view of the current test status across
+all configurations.
 
 ## Build and deploy
 
@@ -23,55 +27,45 @@
 - A copy of https://github.com/protocolbuffers/protobuf
 
 To generate the required Dart files for the protos, run
-`tools/generate_protogen.sh` with the environtment variables
+`tools/generate_protogen.sh` with the environment variables
 `GOOGLEAPIS_PATH` and `PROTOBUF_PATH` set to the location of the checkouts
 mentioned above.
 
-### Staging
-To build the server and deploy to cloud run on staging, run
-
-```
-gcloud builds submit --project=dart-ci-staging --tag gcr.io/dart-ci-staging/current_results
-gcloud run deploy --project=dart-ci-staging current-results --image gcr.io/dart-ci-staging/current_results --platform=managed --allow-unauthenticated
-```
-
-Unauthenticated access is allowed only while the server being developed does
-not modify any data, remove that flag before adding APIs that modify data.
-
-### Production XXX NOT READY YET
-To build the server and deploy to cloud run on production, run
+### Deployment
+To build the server and deploy to production, run
 
 ```
 gcloud builds submit --project=dart-ci --tag gcr.io/dart-ci/current_results
-gcloud run deploy --project=dart-ci current-results --image gcr.io/dart-ci/current_results --platform=managed
 ```
+When that build has completed successfully, run
+```
+gcloud compute ssh current-results-server --project=dart-ci --zone=us-central1-a --command="docker kill current-results; docker rm current-results; docker pull gcr.io/dart-ci/current_results"
+gcloud compute ssh current-results-server --project=dart-ci --zone=us-central1-a --command="docker run -d --net=bridge_net --publish=8080:8080 --name=current-results gcr.io/dart-ci/current_results"
+```
+
+There is also a REST proxy which provides the public REST api for this backend server.
+Instructions on deploying this ESPv2 proxy (https://github.com/GoogleCloudPlatform/esp-v2)
+are in internal team documentation. The connection between the public REST api and the gRPC api
+is configured in the lib/protos/query.proto file in this repository.
 
 ## Services
 
 ### Data cached by server
 
-The server reads the current results.json and flaky.json from cloud storage
-at gs://dart-test-results/configuration/master/[configuration name]/[build number]/
-and stores selected fields from those records in memory. (Flaky.json reads not
-implemented).
+The server reads the current results.json from cloud storage
+at gs://dart-test-results/configuration/main/[configuration name]/[build number]/
+and caches selected fields from those records in memory.
 
 ### Updating results data
 
 The server exposes a service to Pub/Sub on the same project, which is
 triggered by any object creation on the dart-test-results bucket.  If the
-object is a /configuration/master/[configuration name]/latest file, the build
-number is read from that file and the cached results.json and flaky.json are
+object is a /configuration/main/[configuration name]/latest file, the build
+number is read from that file and the cached results.json is
 updated from that build.
 
 ### Serving results data
 
 A gRPC service is defined, with a query message type and a response message
-type defined by protocol buffers.  It will allow queries by test name or
-test name prefix and by configuration or configuration set.
-
-### Managing flakiness
-
-APIs will be defined to query current flakiness data, and to revoke the
-flakiness mark on test-configuration pairs.  When designing the API to
-revoke flakiness, security and auditing concerns must be addressed by
-requiring authentication.
\ No newline at end of file
+type defined by protocol buffers.  It allows test result queries by test name or
+test name prefix and by configuration or configuration prefix.
diff --git a/current_results/lib/src/generated/query.pb.dart b/current_results/lib/src/generated/query.pb.dart
index 64eb747..82303ff 100644
--- a/current_results/lib/src/generated/query.pb.dart
+++ b/current_results/lib/src/generated/query.pb.dart
@@ -1,34 +1,35 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: query.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
 class Empty extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'Empty',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..hasRequiredFields = false;
-
-  Empty._() : super();
   factory Empty() => create();
+  Empty._() : super();
   factory Empty.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory Empty.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'Empty',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -37,9 +38,10 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   Empty copyWith(void Function(Empty) updates) =>
-      super.copyWith((message) => updates(message as Empty))
-          as Empty; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as Empty)) as Empty;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static Empty create() => Empty._();
   Empty createEmptyInstance() => create();
@@ -51,57 +53,41 @@
 }
 
 class GetResultsRequest extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'GetResultsRequest',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'filter')
-    ..a<$core.int>(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'pageSize',
-        $pb.PbFieldType.O3)
-    ..aOS(
-        3,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'pageToken')
-    ..hasRequiredFields = false;
-
-  GetResultsRequest._() : super();
   factory GetResultsRequest({
     $core.String? filter,
     $core.int? pageSize,
     $core.String? pageToken,
   }) {
-    final _result = create();
+    final $result = create();
     if (filter != null) {
-      _result.filter = filter;
+      $result.filter = filter;
     }
     if (pageSize != null) {
-      _result.pageSize = pageSize;
+      $result.pageSize = pageSize;
     }
     if (pageToken != null) {
-      _result.pageToken = pageToken;
+      $result.pageToken = pageToken;
     }
-    return _result;
+    return $result;
   }
+  GetResultsRequest._() : super();
   factory GetResultsRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory GetResultsRequest.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'GetResultsRequest',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'filter')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'pageSize', $pb.PbFieldType.O3)
+    ..aOS(3, _omitFieldNames ? '' : 'pageToken')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -111,8 +97,10 @@
       'Will be removed in next major version')
   GetResultsRequest copyWith(void Function(GetResultsRequest) updates) =>
       super.copyWith((message) => updates(message as GetResultsRequest))
-          as GetResultsRequest; // ignore: deprecated_member_use
+          as GetResultsRequest;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static GetResultsRequest create() => GetResultsRequest._();
   GetResultsRequest createEmptyInstance() => create();
@@ -123,6 +111,11 @@
       $pb.GeneratedMessage.$_defaultFor<GetResultsRequest>(create);
   static GetResultsRequest? _defaultInstance;
 
+  /// The filter contains test names and test name prefixes, and configuration
+  /// names, separated by commas. If there are test names and/or test name
+  /// prefixes, only results for tests matching them are returned.
+  /// If there are configuration names, only results on those configurations
+  /// are returned. If absent, return all results.
   @$pb.TagNumber(1)
   $core.String get filter => $_getSZ(0);
   @$pb.TagNumber(1)
@@ -135,6 +128,10 @@
   @$pb.TagNumber(1)
   void clearFilter() => clearField(1);
 
+  /// The maximum number of results to return.
+  /// The service may return fewer than this value.
+  /// If unspecified, will be 100,000.
+  /// The maximum value is 100,000.
   @$pb.TagNumber(2)
   $core.int get pageSize => $_getIZ(1);
   @$pb.TagNumber(2)
@@ -147,6 +144,8 @@
   @$pb.TagNumber(2)
   void clearPageSize() => clearField(2);
 
+  /// The page token received from a previous call to GetResults.
+  /// All arguments except page_size must be identical to the previous call.
   @$pb.TagNumber(3)
   $core.String get pageToken => $_getSZ(2);
   @$pb.TagNumber(3)
@@ -161,46 +160,37 @@
 }
 
 class GetResultsResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'GetResultsResponse',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..pc<Result>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'results',
-        $pb.PbFieldType.PM,
-        subBuilder: Result.create)
-    ..aOS(2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'nextPageToken')
-    ..hasRequiredFields = false;
-
-  GetResultsResponse._() : super();
   factory GetResultsResponse({
     $core.Iterable<Result>? results,
     $core.String? nextPageToken,
   }) {
-    final _result = create();
+    final $result = create();
     if (results != null) {
-      _result.results.addAll(results);
+      $result.results.addAll(results);
     }
     if (nextPageToken != null) {
-      _result.nextPageToken = nextPageToken;
+      $result.nextPageToken = nextPageToken;
     }
-    return _result;
+    return $result;
   }
+  GetResultsResponse._() : super();
   factory GetResultsResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory GetResultsResponse.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'GetResultsResponse',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..pc<Result>(1, _omitFieldNames ? '' : 'results', $pb.PbFieldType.PM,
+        subBuilder: Result.create)
+    ..aOS(2, _omitFieldNames ? '' : 'nextPageToken')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -210,8 +200,10 @@
       'Will be removed in next major version')
   GetResultsResponse copyWith(void Function(GetResultsResponse) updates) =>
       super.copyWith((message) => updates(message as GetResultsResponse))
-          as GetResultsResponse; // ignore: deprecated_member_use
+          as GetResultsResponse;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static GetResultsResponse create() => GetResultsResponse._();
   GetResultsResponse createEmptyInstance() => create();
@@ -225,6 +217,8 @@
   @$pb.TagNumber(1)
   $core.List<Result> get results => $_getList(0);
 
+  /// A token, which can be sent as `page_token` to retrieve the next page.
+  /// If this field is omitted, there are no subsequent pages.
   @$pb.TagNumber(2)
   $core.String get nextPageToken => $_getSZ(1);
   @$pb.TagNumber(2)
@@ -239,39 +233,6 @@
 }
 
 class Result extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'Result',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'name')
-    ..aOS(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'configuration')
-    ..aOS(
-        3,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'result')
-    ..aOS(4,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'expected')
-    ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'flaky')
-    ..a<$core.int>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timeMs', $pb.PbFieldType.O3)
-    ..pPS(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'experiments')
-    ..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'revision')
-    ..hasRequiredFields = false;
-
-  Result._() : super();
   factory Result({
     $core.String? name,
     $core.String? configuration,
@@ -282,39 +243,56 @@
     $core.Iterable<$core.String>? experiments,
     $core.String? revision,
   }) {
-    final _result = create();
+    final $result = create();
     if (name != null) {
-      _result.name = name;
+      $result.name = name;
     }
     if (configuration != null) {
-      _result.configuration = configuration;
+      $result.configuration = configuration;
     }
     if (result != null) {
-      _result.result = result;
+      $result.result = result;
     }
     if (expected != null) {
-      _result.expected = expected;
+      $result.expected = expected;
     }
     if (flaky != null) {
-      _result.flaky = flaky;
+      $result.flaky = flaky;
     }
     if (timeMs != null) {
-      _result.timeMs = timeMs;
+      $result.timeMs = timeMs;
     }
     if (experiments != null) {
-      _result.experiments.addAll(experiments);
+      $result.experiments.addAll(experiments);
     }
     if (revision != null) {
-      _result.revision = revision;
+      $result.revision = revision;
     }
-    return _result;
+    return $result;
   }
+  Result._() : super();
   factory Result.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory Result.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'Result',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'name')
+    ..aOS(2, _omitFieldNames ? '' : 'configuration')
+    ..aOS(3, _omitFieldNames ? '' : 'result')
+    ..aOS(4, _omitFieldNames ? '' : 'expected')
+    ..aOB(5, _omitFieldNames ? '' : 'flaky')
+    ..a<$core.int>(6, _omitFieldNames ? '' : 'timeMs', $pb.PbFieldType.O3)
+    ..pPS(7, _omitFieldNames ? '' : 'experiments')
+    ..aOS(8, _omitFieldNames ? '' : 'revision')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -323,9 +301,10 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   Result copyWith(void Function(Result) updates) =>
-      super.copyWith((message) => updates(message as Result))
-          as Result; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as Result)) as Result;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static Result create() => Result._();
   Result createEmptyInstance() => create();
@@ -424,48 +403,36 @@
 }
 
 class ListTestsRequest extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ListTestsRequest',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'prefix')
-    ..a<$core.int>(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'limit',
-        $pb.PbFieldType.O3)
-    ..hasRequiredFields = false;
-
-  ListTestsRequest._() : super();
   factory ListTestsRequest({
     $core.String? prefix,
     $core.int? limit,
   }) {
-    final _result = create();
+    final $result = create();
     if (prefix != null) {
-      _result.prefix = prefix;
+      $result.prefix = prefix;
     }
     if (limit != null) {
-      _result.limit = limit;
+      $result.limit = limit;
     }
-    return _result;
+    return $result;
   }
+  ListTestsRequest._() : super();
   factory ListTestsRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ListTestsRequest.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'ListTestsRequest',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'prefix')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'limit', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -475,8 +442,10 @@
       'Will be removed in next major version')
   ListTestsRequest copyWith(void Function(ListTestsRequest) updates) =>
       super.copyWith((message) => updates(message as ListTestsRequest))
-          as ListTestsRequest; // ignore: deprecated_member_use
+          as ListTestsRequest;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ListTestsRequest create() => ListTestsRequest._();
   ListTestsRequest createEmptyInstance() => create();
@@ -513,38 +482,31 @@
 }
 
 class ListTestsResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ListTestsResponse',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..pPS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'names')
-    ..hasRequiredFields = false;
-
-  ListTestsResponse._() : super();
   factory ListTestsResponse({
     $core.Iterable<$core.String>? names,
   }) {
-    final _result = create();
+    final $result = create();
     if (names != null) {
-      _result.names.addAll(names);
+      $result.names.addAll(names);
     }
-    return _result;
+    return $result;
   }
+  ListTestsResponse._() : super();
   factory ListTestsResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ListTestsResponse.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'ListTestsResponse',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..pPS(1, _omitFieldNames ? '' : 'names')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -554,8 +516,10 @@
       'Will be removed in next major version')
   ListTestsResponse copyWith(void Function(ListTestsResponse) updates) =>
       super.copyWith((message) => updates(message as ListTestsResponse))
-          as ListTestsResponse; // ignore: deprecated_member_use
+          as ListTestsResponse;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ListTestsResponse create() => ListTestsResponse._();
   ListTestsResponse createEmptyInstance() => create();
@@ -571,38 +535,31 @@
 }
 
 class ListConfigurationsRequest extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ListConfigurationsRequest',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'prefix')
-    ..hasRequiredFields = false;
-
-  ListConfigurationsRequest._() : super();
   factory ListConfigurationsRequest({
     $core.String? prefix,
   }) {
-    final _result = create();
+    final $result = create();
     if (prefix != null) {
-      _result.prefix = prefix;
+      $result.prefix = prefix;
     }
-    return _result;
+    return $result;
   }
+  ListConfigurationsRequest._() : super();
   factory ListConfigurationsRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ListConfigurationsRequest.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'ListConfigurationsRequest',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'prefix')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -614,8 +571,10 @@
   ListConfigurationsRequest copyWith(
           void Function(ListConfigurationsRequest) updates) =>
       super.copyWith((message) => updates(message as ListConfigurationsRequest))
-          as ListConfigurationsRequest; // ignore: deprecated_member_use
+          as ListConfigurationsRequest;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ListConfigurationsRequest create() => ListConfigurationsRequest._();
   ListConfigurationsRequest createEmptyInstance() => create();
@@ -640,38 +599,31 @@
 }
 
 class ListConfigurationsResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ListConfigurationsResponse',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..pPS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'configurations')
-    ..hasRequiredFields = false;
-
-  ListConfigurationsResponse._() : super();
   factory ListConfigurationsResponse({
     $core.Iterable<$core.String>? configurations,
   }) {
-    final _result = create();
+    final $result = create();
     if (configurations != null) {
-      _result.configurations.addAll(configurations);
+      $result.configurations.addAll(configurations);
     }
-    return _result;
+    return $result;
   }
+  ListConfigurationsResponse._() : super();
   factory ListConfigurationsResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ListConfigurationsResponse.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'ListConfigurationsResponse',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..pPS(1, _omitFieldNames ? '' : 'configurations')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -684,8 +636,10 @@
           void Function(ListConfigurationsResponse) updates) =>
       super.copyWith(
               (message) => updates(message as ListConfigurationsResponse))
-          as ListConfigurationsResponse; // ignore: deprecated_member_use
+          as ListConfigurationsResponse;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ListConfigurationsResponse create() => ListConfigurationsResponse._();
   ListConfigurationsResponse createEmptyInstance() => create();
@@ -701,40 +655,33 @@
 }
 
 class FetchResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'FetchResponse',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..pc<ConfigurationUpdate>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'updates',
-        $pb.PbFieldType.PM,
-        subBuilder: ConfigurationUpdate.create)
-    ..hasRequiredFields = false;
-
-  FetchResponse._() : super();
   factory FetchResponse({
     $core.Iterable<ConfigurationUpdate>? updates,
   }) {
-    final _result = create();
+    final $result = create();
     if (updates != null) {
-      _result.updates.addAll(updates);
+      $result.updates.addAll(updates);
     }
-    return _result;
+    return $result;
   }
+  FetchResponse._() : super();
   factory FetchResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory FetchResponse.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'FetchResponse',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..pc<ConfigurationUpdate>(
+        1, _omitFieldNames ? '' : 'updates', $pb.PbFieldType.PM,
+        subBuilder: ConfigurationUpdate.create)
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -744,8 +691,10 @@
       'Will be removed in next major version')
   FetchResponse copyWith(void Function(FetchResponse) updates) =>
       super.copyWith((message) => updates(message as FetchResponse))
-          as FetchResponse; // ignore: deprecated_member_use
+          as FetchResponse;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static FetchResponse create() => FetchResponse._();
   FetchResponse createEmptyInstance() => create();
@@ -761,38 +710,31 @@
 }
 
 class ConfigurationUpdate extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ConfigurationUpdate',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'current_results'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'configuration')
-    ..hasRequiredFields = false;
-
-  ConfigurationUpdate._() : super();
   factory ConfigurationUpdate({
     $core.String? configuration,
   }) {
-    final _result = create();
+    final $result = create();
     if (configuration != null) {
-      _result.configuration = configuration;
+      $result.configuration = configuration;
     }
-    return _result;
+    return $result;
   }
+  ConfigurationUpdate._() : super();
   factory ConfigurationUpdate.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory ConfigurationUpdate.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'ConfigurationUpdate',
+      package:
+          const $pb.PackageName(_omitMessageNames ? '' : 'current_results'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'configuration')
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -802,8 +744,10 @@
       'Will be removed in next major version')
   ConfigurationUpdate copyWith(void Function(ConfigurationUpdate) updates) =>
       super.copyWith((message) => updates(message as ConfigurationUpdate))
-          as ConfigurationUpdate; // ignore: deprecated_member_use
+          as ConfigurationUpdate;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ConfigurationUpdate create() => ConfigurationUpdate._();
   ConfigurationUpdate createEmptyInstance() => create();
@@ -826,3 +770,7 @@
   @$pb.TagNumber(1)
   void clearConfiguration() => clearField(1);
 }
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames =
+    $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/current_results/lib/src/generated/query.pbenum.dart b/current_results/lib/src/generated/query.pbenum.dart
index 9937c96..069c66c 100644
--- a/current_results/lib/src/generated/query.pbenum.dart
+++ b/current_results/lib/src/generated/query.pbenum.dart
@@ -1,6 +1,10 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: query.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
diff --git a/current_results/lib/src/generated/query.pbgrpc.dart b/current_results/lib/src/generated/query.pbgrpc.dart
index ea2377c..a74b742 100644
--- a/current_results/lib/src/generated/query.pbgrpc.dart
+++ b/current_results/lib/src/generated/query.pbgrpc.dart
@@ -1,18 +1,25 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: query.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
 
 import 'dart:async' as $async;
-
 import 'dart:core' as $core;
 
 import 'package:grpc/service_api.dart' as $grpc;
+import 'package:protobuf/protobuf.dart' as $pb;
+
 import 'query.pb.dart' as $0;
+
 export 'query.pb.dart';
 
+@$pb.GrpcServiceName('current_results.Query')
 class QueryClient extends $grpc.Client {
   static final _$getResults =
       $grpc.ClientMethod<$0.GetResultsRequest, $0.GetResultsResponse>(
@@ -79,6 +86,7 @@
   }
 }
 
+@$pb.GrpcServiceName('current_results.Query')
 abstract class QueryServiceBase extends $grpc.Service {
   $core.String get $name => 'current_results.Query';
 
diff --git a/current_results/lib/src/generated/query.pbjson.dart b/current_results/lib/src/generated/query.pbjson.dart
index a19a7c9..f9dac44 100644
--- a/current_results/lib/src/generated/query.pbjson.dart
+++ b/current_results/lib/src/generated/query.pbjson.dart
@@ -1,40 +1,47 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: query.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
-import 'dart:core' as $core;
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
 import 'dart:convert' as $convert;
+import 'dart:core' as $core;
 import 'dart:typed_data' as $typed_data;
 
 @$core.Deprecated('Use emptyDescriptor instead')
-const Empty$json = const {
+const Empty$json = {
   '1': 'Empty',
 };
 
 /// Descriptor for `Empty`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List emptyDescriptor =
     $convert.base64Decode('CgVFbXB0eQ==');
+
 @$core.Deprecated('Use getResultsRequestDescriptor instead')
-const GetResultsRequest$json = const {
+const GetResultsRequest$json = {
   '1': 'GetResultsRequest',
-  '2': const [
-    const {'1': 'filter', '3': 1, '4': 1, '5': 9, '10': 'filter'},
-    const {'1': 'page_size', '3': 2, '4': 1, '5': 5, '10': 'pageSize'},
-    const {'1': 'page_token', '3': 3, '4': 1, '5': 9, '10': 'pageToken'},
+  '2': [
+    {'1': 'filter', '3': 1, '4': 1, '5': 9, '10': 'filter'},
+    {'1': 'page_size', '3': 2, '4': 1, '5': 5, '10': 'pageSize'},
+    {'1': 'page_token', '3': 3, '4': 1, '5': 9, '10': 'pageToken'},
   ],
 };
 
 /// Descriptor for `GetResultsRequest`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List getResultsRequestDescriptor = $convert.base64Decode(
-    'ChFHZXRSZXN1bHRzUmVxdWVzdBIWCgZmaWx0ZXIYASABKAlSBmZpbHRlchIbCglwYWdlX3NpemUYAiABKAVSCHBhZ2VTaXplEh0KCnBhZ2VfdG9rZW4YAyABKAlSCXBhZ2VUb2tlbg==');
+    'ChFHZXRSZXN1bHRzUmVxdWVzdBIWCgZmaWx0ZXIYASABKAlSBmZpbHRlchIbCglwYWdlX3Npem'
+    'UYAiABKAVSCHBhZ2VTaXplEh0KCnBhZ2VfdG9rZW4YAyABKAlSCXBhZ2VUb2tlbg==');
+
 @$core.Deprecated('Use getResultsResponseDescriptor instead')
-const GetResultsResponse$json = const {
+const GetResultsResponse$json = {
   '1': 'GetResultsResponse',
-  '2': const [
-    const {
+  '2': [
+    {
       '1': 'results',
       '3': 1,
       '4': 3,
@@ -42,65 +49,69 @@
       '6': '.current_results.Result',
       '10': 'results'
     },
-    const {
-      '1': 'next_page_token',
-      '3': 2,
-      '4': 1,
-      '5': 9,
-      '10': 'nextPageToken'
-    },
+    {'1': 'next_page_token', '3': 2, '4': 1, '5': 9, '10': 'nextPageToken'},
   ],
 };
 
 /// Descriptor for `GetResultsResponse`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List getResultsResponseDescriptor = $convert.base64Decode(
-    'ChJHZXRSZXN1bHRzUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIXLmN1cnJlbnRfcmVzdWx0cy5SZXN1bHRSB3Jlc3VsdHMSJgoPbmV4dF9wYWdlX3Rva2VuGAIgASgJUg1uZXh0UGFnZVRva2Vu');
+    'ChJHZXRSZXN1bHRzUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIXLmN1cnJlbnRfcmVzdWx0cy'
+    '5SZXN1bHRSB3Jlc3VsdHMSJgoPbmV4dF9wYWdlX3Rva2VuGAIgASgJUg1uZXh0UGFnZVRva2Vu');
+
 @$core.Deprecated('Use resultDescriptor instead')
-const Result$json = const {
+const Result$json = {
   '1': 'Result',
-  '2': const [
-    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
-    const {'1': 'configuration', '3': 2, '4': 1, '5': 9, '10': 'configuration'},
-    const {'1': 'result', '3': 3, '4': 1, '5': 9, '10': 'result'},
-    const {'1': 'expected', '3': 4, '4': 1, '5': 9, '10': 'expected'},
-    const {'1': 'flaky', '3': 5, '4': 1, '5': 8, '10': 'flaky'},
-    const {'1': 'time_ms', '3': 6, '4': 1, '5': 5, '10': 'timeMs'},
-    const {'1': 'experiments', '3': 7, '4': 3, '5': 9, '10': 'experiments'},
-    const {'1': 'revision', '3': 8, '4': 1, '5': 9, '10': 'revision'},
+  '2': [
+    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    {'1': 'configuration', '3': 2, '4': 1, '5': 9, '10': 'configuration'},
+    {'1': 'result', '3': 3, '4': 1, '5': 9, '10': 'result'},
+    {'1': 'expected', '3': 4, '4': 1, '5': 9, '10': 'expected'},
+    {'1': 'flaky', '3': 5, '4': 1, '5': 8, '10': 'flaky'},
+    {'1': 'time_ms', '3': 6, '4': 1, '5': 5, '10': 'timeMs'},
+    {'1': 'experiments', '3': 7, '4': 3, '5': 9, '10': 'experiments'},
+    {'1': 'revision', '3': 8, '4': 1, '5': 9, '10': 'revision'},
   ],
 };
 
 /// Descriptor for `Result`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List resultDescriptor = $convert.base64Decode(
-    'CgZSZXN1bHQSEgoEbmFtZRgBIAEoCVIEbmFtZRIkCg1jb25maWd1cmF0aW9uGAIgASgJUg1jb25maWd1cmF0aW9uEhYKBnJlc3VsdBgDIAEoCVIGcmVzdWx0EhoKCGV4cGVjdGVkGAQgASgJUghleHBlY3RlZBIUCgVmbGFreRgFIAEoCFIFZmxha3kSFwoHdGltZV9tcxgGIAEoBVIGdGltZU1zEiAKC2V4cGVyaW1lbnRzGAcgAygJUgtleHBlcmltZW50cxIaCghyZXZpc2lvbhgIIAEoCVIIcmV2aXNpb24=');
+    'CgZSZXN1bHQSEgoEbmFtZRgBIAEoCVIEbmFtZRIkCg1jb25maWd1cmF0aW9uGAIgASgJUg1jb2'
+    '5maWd1cmF0aW9uEhYKBnJlc3VsdBgDIAEoCVIGcmVzdWx0EhoKCGV4cGVjdGVkGAQgASgJUghl'
+    'eHBlY3RlZBIUCgVmbGFreRgFIAEoCFIFZmxha3kSFwoHdGltZV9tcxgGIAEoBVIGdGltZU1zEi'
+    'AKC2V4cGVyaW1lbnRzGAcgAygJUgtleHBlcmltZW50cxIaCghyZXZpc2lvbhgIIAEoCVIIcmV2'
+    'aXNpb24=');
+
 @$core.Deprecated('Use listTestsRequestDescriptor instead')
-const ListTestsRequest$json = const {
+const ListTestsRequest$json = {
   '1': 'ListTestsRequest',
-  '2': const [
-    const {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
-    const {'1': 'limit', '3': 2, '4': 1, '5': 5, '10': 'limit'},
+  '2': [
+    {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
+    {'1': 'limit', '3': 2, '4': 1, '5': 5, '10': 'limit'},
   ],
 };
 
 /// Descriptor for `ListTestsRequest`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List listTestsRequestDescriptor = $convert.base64Decode(
-    'ChBMaXN0VGVzdHNSZXF1ZXN0EhYKBnByZWZpeBgBIAEoCVIGcHJlZml4EhQKBWxpbWl0GAIgASgFUgVsaW1pdA==');
+    'ChBMaXN0VGVzdHNSZXF1ZXN0EhYKBnByZWZpeBgBIAEoCVIGcHJlZml4EhQKBWxpbWl0GAIgAS'
+    'gFUgVsaW1pdA==');
+
 @$core.Deprecated('Use listTestsResponseDescriptor instead')
-const ListTestsResponse$json = const {
+const ListTestsResponse$json = {
   '1': 'ListTestsResponse',
-  '2': const [
-    const {'1': 'names', '3': 1, '4': 3, '5': 9, '10': 'names'},
+  '2': [
+    {'1': 'names', '3': 1, '4': 3, '5': 9, '10': 'names'},
   ],
 };
 
 /// Descriptor for `ListTestsResponse`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List listTestsResponseDescriptor = $convert
     .base64Decode('ChFMaXN0VGVzdHNSZXNwb25zZRIUCgVuYW1lcxgBIAMoCVIFbmFtZXM=');
+
 @$core.Deprecated('Use listConfigurationsRequestDescriptor instead')
-const ListConfigurationsRequest$json = const {
+const ListConfigurationsRequest$json = {
   '1': 'ListConfigurationsRequest',
-  '2': const [
-    const {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
+  '2': [
+    {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
   ],
 };
 
@@ -108,29 +119,26 @@
 final $typed_data.Uint8List listConfigurationsRequestDescriptor =
     $convert.base64Decode(
         'ChlMaXN0Q29uZmlndXJhdGlvbnNSZXF1ZXN0EhYKBnByZWZpeBgBIAEoCVIGcHJlZml4');
+
 @$core.Deprecated('Use listConfigurationsResponseDescriptor instead')
-const ListConfigurationsResponse$json = const {
+const ListConfigurationsResponse$json = {
   '1': 'ListConfigurationsResponse',
-  '2': const [
-    const {
-      '1': 'configurations',
-      '3': 1,
-      '4': 3,
-      '5': 9,
-      '10': 'configurations'
-    },
+  '2': [
+    {'1': 'configurations', '3': 1, '4': 3, '5': 9, '10': 'configurations'},
   ],
 };
 
 /// Descriptor for `ListConfigurationsResponse`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List listConfigurationsResponseDescriptor =
     $convert.base64Decode(
-        'ChpMaXN0Q29uZmlndXJhdGlvbnNSZXNwb25zZRImCg5jb25maWd1cmF0aW9ucxgBIAMoCVIOY29uZmlndXJhdGlvbnM=');
+        'ChpMaXN0Q29uZmlndXJhdGlvbnNSZXNwb25zZRImCg5jb25maWd1cmF0aW9ucxgBIAMoCVIOY2'
+        '9uZmlndXJhdGlvbnM=');
+
 @$core.Deprecated('Use fetchResponseDescriptor instead')
-const FetchResponse$json = const {
+const FetchResponse$json = {
   '1': 'FetchResponse',
-  '2': const [
-    const {
+  '2': [
+    {
       '1': 'updates',
       '3': 1,
       '4': 3,
@@ -143,15 +151,18 @@
 
 /// Descriptor for `FetchResponse`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List fetchResponseDescriptor = $convert.base64Decode(
-    'Cg1GZXRjaFJlc3BvbnNlEj4KB3VwZGF0ZXMYASADKAsyJC5jdXJyZW50X3Jlc3VsdHMuQ29uZmlndXJhdGlvblVwZGF0ZVIHdXBkYXRlcw==');
+    'Cg1GZXRjaFJlc3BvbnNlEj4KB3VwZGF0ZXMYASADKAsyJC5jdXJyZW50X3Jlc3VsdHMuQ29uZm'
+    'lndXJhdGlvblVwZGF0ZVIHdXBkYXRlcw==');
+
 @$core.Deprecated('Use configurationUpdateDescriptor instead')
-const ConfigurationUpdate$json = const {
+const ConfigurationUpdate$json = {
   '1': 'ConfigurationUpdate',
-  '2': const [
-    const {'1': 'configuration', '3': 1, '4': 1, '5': 9, '10': 'configuration'},
+  '2': [
+    {'1': 'configuration', '3': 1, '4': 1, '5': 9, '10': 'configuration'},
   ],
 };
 
 /// Descriptor for `ConfigurationUpdate`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List configurationUpdateDescriptor = $convert.base64Decode(
-    'ChNDb25maWd1cmF0aW9uVXBkYXRlEiQKDWNvbmZpZ3VyYXRpb24YASABKAlSDWNvbmZpZ3VyYXRpb24=');
+    'ChNDb25maWd1cmF0aW9uVXBkYXRlEiQKDWNvbmZpZ3VyYXRpb24YASABKAlSDWNvbmZpZ3VyYX'
+    'Rpb24=');
diff --git a/current_results/lib/src/generated/result.pb.dart b/current_results/lib/src/generated/result.pb.dart
index b62c19d..0ad5cca 100644
--- a/current_results/lib/src/generated/result.pb.dart
+++ b/current_results/lib/src/generated/result.pb.dart
@@ -1,62 +1,20 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: result.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
+/// Describes a test run on a single configuration on a SDK commit.
 class Result extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'Result',
-      package: const $pb.PackageName(
-          const $core.bool.fromEnvironment('protobuf.omit_message_names')
-              ? ''
-              : 'dart_ci'),
-      createEmptyInstance: create)
-    ..aOS(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'name')
-    ..aOS(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'configuration')
-    ..a<$core.int>(
-        3,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'timeMs',
-        $pb.PbFieldType.O3)
-    ..aOS(
-        4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'result')
-    ..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'expected')
-    ..aOB(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'matches')
-    ..aOS(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'botName')
-    ..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'commitHash')
-    ..aOS(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildNumber')
-    ..aOS(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'builderName')
-    ..aOB(11, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'flaky')
-    ..aOB(12, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'previousFlaky')
-    ..aOS(13, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'previousCommitHash')
-    ..a<$core.int>(14, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'previousCommitTime', $pb.PbFieldType.O3)
-    ..aOS(15, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'previousBuildNumber')
-    ..aOS(16, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'previousResult')
-    ..aOB(17, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'changed')
-    ..pPS(18, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'experiments')
-    ..aOS(100, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'suite')
-    ..aOS(101, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'testName')
-    ..a<$core.int>(102, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'commitTime', $pb.PbFieldType.O3)
-    ..hasRequiredFields = false;
-
-  Result._() : super();
   factory Result({
     $core.String? name,
     $core.String? configuration,
@@ -80,78 +38,108 @@
     $core.String? testName,
     $core.int? commitTime,
   }) {
-    final _result = create();
+    final $result = create();
     if (name != null) {
-      _result.name = name;
+      $result.name = name;
     }
     if (configuration != null) {
-      _result.configuration = configuration;
+      $result.configuration = configuration;
     }
     if (timeMs != null) {
-      _result.timeMs = timeMs;
+      $result.timeMs = timeMs;
     }
     if (result != null) {
-      _result.result = result;
+      $result.result = result;
     }
     if (expected != null) {
-      _result.expected = expected;
+      $result.expected = expected;
     }
     if (matches != null) {
-      _result.matches = matches;
+      $result.matches = matches;
     }
     if (botName != null) {
-      _result.botName = botName;
+      $result.botName = botName;
     }
     if (commitHash != null) {
-      _result.commitHash = commitHash;
+      $result.commitHash = commitHash;
     }
     if (buildNumber != null) {
-      _result.buildNumber = buildNumber;
+      $result.buildNumber = buildNumber;
     }
     if (builderName != null) {
-      _result.builderName = builderName;
+      $result.builderName = builderName;
     }
     if (flaky != null) {
-      _result.flaky = flaky;
+      $result.flaky = flaky;
     }
     if (previousFlaky != null) {
-      _result.previousFlaky = previousFlaky;
+      $result.previousFlaky = previousFlaky;
     }
     if (previousCommitHash != null) {
-      _result.previousCommitHash = previousCommitHash;
+      $result.previousCommitHash = previousCommitHash;
     }
     if (previousCommitTime != null) {
-      _result.previousCommitTime = previousCommitTime;
+      $result.previousCommitTime = previousCommitTime;
     }
     if (previousBuildNumber != null) {
-      _result.previousBuildNumber = previousBuildNumber;
+      $result.previousBuildNumber = previousBuildNumber;
     }
     if (previousResult != null) {
-      _result.previousResult = previousResult;
+      $result.previousResult = previousResult;
     }
     if (changed != null) {
-      _result.changed = changed;
+      $result.changed = changed;
     }
     if (experiments != null) {
-      _result.experiments.addAll(experiments);
+      $result.experiments.addAll(experiments);
     }
     if (suite != null) {
-      _result.suite = suite;
+      $result.suite = suite;
     }
     if (testName != null) {
-      _result.testName = testName;
+      $result.testName = testName;
     }
     if (commitTime != null) {
-      _result.commitTime = commitTime;
+      $result.commitTime = commitTime;
     }
-    return _result;
+    return $result;
   }
+  Result._() : super();
   factory Result.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
   factory Result.fromJson($core.String i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'Result',
+      package: const $pb.PackageName(_omitMessageNames ? '' : 'dart_ci'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'name')
+    ..aOS(2, _omitFieldNames ? '' : 'configuration')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'timeMs', $pb.PbFieldType.O3)
+    ..aOS(4, _omitFieldNames ? '' : 'result')
+    ..aOS(5, _omitFieldNames ? '' : 'expected')
+    ..aOB(6, _omitFieldNames ? '' : 'matches')
+    ..aOS(7, _omitFieldNames ? '' : 'botName')
+    ..aOS(8, _omitFieldNames ? '' : 'commitHash')
+    ..aOS(9, _omitFieldNames ? '' : 'buildNumber')
+    ..aOS(10, _omitFieldNames ? '' : 'builderName')
+    ..aOB(11, _omitFieldNames ? '' : 'flaky')
+    ..aOB(12, _omitFieldNames ? '' : 'previousFlaky')
+    ..aOS(13, _omitFieldNames ? '' : 'previousCommitHash')
+    ..a<$core.int>(
+        14, _omitFieldNames ? '' : 'previousCommitTime', $pb.PbFieldType.O3)
+    ..aOS(15, _omitFieldNames ? '' : 'previousBuildNumber')
+    ..aOS(16, _omitFieldNames ? '' : 'previousResult')
+    ..aOB(17, _omitFieldNames ? '' : 'changed')
+    ..pPS(18, _omitFieldNames ? '' : 'experiments')
+    ..aOS(100, _omitFieldNames ? '' : 'suite')
+    ..aOS(101, _omitFieldNames ? '' : 'testName')
+    ..a<$core.int>(102, _omitFieldNames ? '' : 'commitTime', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false;
+
   @$core.Deprecated('Using this can add significant overhead to your binary. '
       'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
       'Will be removed in next major version')
@@ -160,9 +148,10 @@
       'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
       'Will be removed in next major version')
   Result copyWith(void Function(Result) updates) =>
-      super.copyWith((message) => updates(message as Result))
-          as Result; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as Result)) as Result;
+
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static Result create() => Result._();
   Result createEmptyInstance() => create();
@@ -415,3 +404,7 @@
   @$pb.TagNumber(102)
   void clearCommitTime() => clearField(102);
 }
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames =
+    $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/current_results/lib/src/generated/result.pbenum.dart b/current_results/lib/src/generated/result.pbenum.dart
index 38ec18d..9b665f3 100644
--- a/current_results/lib/src/generated/result.pbenum.dart
+++ b/current_results/lib/src/generated/result.pbenum.dart
@@ -1,6 +1,10 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: result.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
diff --git a/current_results/lib/src/generated/result.pbjson.dart b/current_results/lib/src/generated/result.pbjson.dart
index cd0ad03..170d769 100644
--- a/current_results/lib/src/generated/result.pbjson.dart
+++ b/current_results/lib/src/generated/result.pbjson.dart
@@ -1,72 +1,76 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: result.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
 
-import 'dart:core' as $core;
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
 import 'dart:convert' as $convert;
+import 'dart:core' as $core;
 import 'dart:typed_data' as $typed_data;
 
 @$core.Deprecated('Use resultDescriptor instead')
-const Result$json = const {
+const Result$json = {
   '1': 'Result',
-  '2': const [
-    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
-    const {'1': 'configuration', '3': 2, '4': 1, '5': 9, '10': 'configuration'},
-    const {'1': 'suite', '3': 100, '4': 1, '5': 9, '10': 'suite'},
-    const {'1': 'test_name', '3': 101, '4': 1, '5': 9, '10': 'testName'},
-    const {'1': 'time_ms', '3': 3, '4': 1, '5': 5, '10': 'timeMs'},
-    const {'1': 'result', '3': 4, '4': 1, '5': 9, '10': 'result'},
-    const {'1': 'expected', '3': 5, '4': 1, '5': 9, '10': 'expected'},
-    const {'1': 'matches', '3': 6, '4': 1, '5': 8, '10': 'matches'},
-    const {'1': 'bot_name', '3': 7, '4': 1, '5': 9, '10': 'botName'},
-    const {'1': 'commit_hash', '3': 8, '4': 1, '5': 9, '10': 'commitHash'},
-    const {'1': 'commit_time', '3': 102, '4': 1, '5': 5, '10': 'commitTime'},
-    const {'1': 'build_number', '3': 9, '4': 1, '5': 9, '10': 'buildNumber'},
-    const {'1': 'builder_name', '3': 10, '4': 1, '5': 9, '10': 'builderName'},
-    const {'1': 'flaky', '3': 11, '4': 1, '5': 8, '10': 'flaky'},
-    const {
-      '1': 'previous_flaky',
-      '3': 12,
-      '4': 1,
-      '5': 8,
-      '10': 'previousFlaky'
-    },
-    const {
+  '2': [
+    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    {'1': 'configuration', '3': 2, '4': 1, '5': 9, '10': 'configuration'},
+    {'1': 'suite', '3': 100, '4': 1, '5': 9, '10': 'suite'},
+    {'1': 'test_name', '3': 101, '4': 1, '5': 9, '10': 'testName'},
+    {'1': 'time_ms', '3': 3, '4': 1, '5': 5, '10': 'timeMs'},
+    {'1': 'result', '3': 4, '4': 1, '5': 9, '10': 'result'},
+    {'1': 'expected', '3': 5, '4': 1, '5': 9, '10': 'expected'},
+    {'1': 'matches', '3': 6, '4': 1, '5': 8, '10': 'matches'},
+    {'1': 'bot_name', '3': 7, '4': 1, '5': 9, '10': 'botName'},
+    {'1': 'commit_hash', '3': 8, '4': 1, '5': 9, '10': 'commitHash'},
+    {'1': 'commit_time', '3': 102, '4': 1, '5': 5, '10': 'commitTime'},
+    {'1': 'build_number', '3': 9, '4': 1, '5': 9, '10': 'buildNumber'},
+    {'1': 'builder_name', '3': 10, '4': 1, '5': 9, '10': 'builderName'},
+    {'1': 'flaky', '3': 11, '4': 1, '5': 8, '10': 'flaky'},
+    {'1': 'previous_flaky', '3': 12, '4': 1, '5': 8, '10': 'previousFlaky'},
+    {
       '1': 'previous_commit_hash',
       '3': 13,
       '4': 1,
       '5': 9,
       '10': 'previousCommitHash'
     },
-    const {
+    {
       '1': 'previous_commit_time',
       '3': 14,
       '4': 1,
       '5': 5,
       '10': 'previousCommitTime'
     },
-    const {
+    {
       '1': 'previous_build_number',
       '3': 15,
       '4': 1,
       '5': 9,
       '10': 'previousBuildNumber'
     },
-    const {
-      '1': 'previous_result',
-      '3': 16,
-      '4': 1,
-      '5': 9,
-      '10': 'previousResult'
-    },
-    const {'1': 'changed', '3': 17, '4': 1, '5': 8, '10': 'changed'},
-    const {'1': 'experiments', '3': 18, '4': 3, '5': 9, '10': 'experiments'},
+    {'1': 'previous_result', '3': 16, '4': 1, '5': 9, '10': 'previousResult'},
+    {'1': 'changed', '3': 17, '4': 1, '5': 8, '10': 'changed'},
+    {'1': 'experiments', '3': 18, '4': 3, '5': 9, '10': 'experiments'},
   ],
 };
 
 /// Descriptor for `Result`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List resultDescriptor = $convert.base64Decode(
-    'CgZSZXN1bHQSEgoEbmFtZRgBIAEoCVIEbmFtZRIkCg1jb25maWd1cmF0aW9uGAIgASgJUg1jb25maWd1cmF0aW9uEhQKBXN1aXRlGGQgASgJUgVzdWl0ZRIbCgl0ZXN0X25hbWUYZSABKAlSCHRlc3ROYW1lEhcKB3RpbWVfbXMYAyABKAVSBnRpbWVNcxIWCgZyZXN1bHQYBCABKAlSBnJlc3VsdBIaCghleHBlY3RlZBgFIAEoCVIIZXhwZWN0ZWQSGAoHbWF0Y2hlcxgGIAEoCFIHbWF0Y2hlcxIZCghib3RfbmFtZRgHIAEoCVIHYm90TmFtZRIfCgtjb21taXRfaGFzaBgIIAEoCVIKY29tbWl0SGFzaBIfCgtjb21taXRfdGltZRhmIAEoBVIKY29tbWl0VGltZRIhCgxidWlsZF9udW1iZXIYCSABKAlSC2J1aWxkTnVtYmVyEiEKDGJ1aWxkZXJfbmFtZRgKIAEoCVILYnVpbGRlck5hbWUSFAoFZmxha3kYCyABKAhSBWZsYWt5EiUKDnByZXZpb3VzX2ZsYWt5GAwgASgIUg1wcmV2aW91c0ZsYWt5EjAKFHByZXZpb3VzX2NvbW1pdF9oYXNoGA0gASgJUhJwcmV2aW91c0NvbW1pdEhhc2gSMAoUcHJldmlvdXNfY29tbWl0X3RpbWUYDiABKAVSEnByZXZpb3VzQ29tbWl0VGltZRIyChVwcmV2aW91c19idWlsZF9udW1iZXIYDyABKAlSE3ByZXZpb3VzQnVpbGROdW1iZXISJwoPcHJldmlvdXNfcmVzdWx0GBAgASgJUg5wcmV2aW91c1Jlc3VsdBIYCgdjaGFuZ2VkGBEgASgIUgdjaGFuZ2VkEiAKC2V4cGVyaW1lbnRzGBIgAygJUgtleHBlcmltZW50cw==');
+    'CgZSZXN1bHQSEgoEbmFtZRgBIAEoCVIEbmFtZRIkCg1jb25maWd1cmF0aW9uGAIgASgJUg1jb2'
+    '5maWd1cmF0aW9uEhQKBXN1aXRlGGQgASgJUgVzdWl0ZRIbCgl0ZXN0X25hbWUYZSABKAlSCHRl'
+    'c3ROYW1lEhcKB3RpbWVfbXMYAyABKAVSBnRpbWVNcxIWCgZyZXN1bHQYBCABKAlSBnJlc3VsdB'
+    'IaCghleHBlY3RlZBgFIAEoCVIIZXhwZWN0ZWQSGAoHbWF0Y2hlcxgGIAEoCFIHbWF0Y2hlcxIZ'
+    'Cghib3RfbmFtZRgHIAEoCVIHYm90TmFtZRIfCgtjb21taXRfaGFzaBgIIAEoCVIKY29tbWl0SG'
+    'FzaBIfCgtjb21taXRfdGltZRhmIAEoBVIKY29tbWl0VGltZRIhCgxidWlsZF9udW1iZXIYCSAB'
+    'KAlSC2J1aWxkTnVtYmVyEiEKDGJ1aWxkZXJfbmFtZRgKIAEoCVILYnVpbGRlck5hbWUSFAoFZm'
+    'xha3kYCyABKAhSBWZsYWt5EiUKDnByZXZpb3VzX2ZsYWt5GAwgASgIUg1wcmV2aW91c0ZsYWt5'
+    'EjAKFHByZXZpb3VzX2NvbW1pdF9oYXNoGA0gASgJUhJwcmV2aW91c0NvbW1pdEhhc2gSMAoUcH'
+    'JldmlvdXNfY29tbWl0X3RpbWUYDiABKAVSEnByZXZpb3VzQ29tbWl0VGltZRIyChVwcmV2aW91'
+    'c19idWlsZF9udW1iZXIYDyABKAlSE3ByZXZpb3VzQnVpbGROdW1iZXISJwoPcHJldmlvdXNfcm'
+    'VzdWx0GBAgASgJUg5wcmV2aW91c1Jlc3VsdBIYCgdjaGFuZ2VkGBEgASgIUgdjaGFuZ2VkEiAK'
+    'C2V4cGVyaW1lbnRzGBIgAygJUgtleHBlcmltZW50cw==');
diff --git a/current_results/lib/src/generated/result.pbserver.dart b/current_results/lib/src/generated/result.pbserver.dart
index 30488ff..2852da2 100644
--- a/current_results/lib/src/generated/result.pbserver.dart
+++ b/current_results/lib/src/generated/result.pbserver.dart
@@ -1,8 +1,13 @@
-///
+//
 //  Generated code. Do not modify.
 //  source: result.proto
 //
 // @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
 
 export 'result.pb.dart';
diff --git a/current_results/tools/generate_protogen.sh b/current_results/tools/generate_protogen.sh
index e6cd8d7..7a6c053 100755
--- a/current_results/tools/generate_protogen.sh
+++ b/current_results/tools/generate_protogen.sh
@@ -22,7 +22,10 @@
   exit 1
 fi
 
-protoc --dart_out=lib/src/generated -I$PROTOBUF_PATH/src $PROTOBUF_PATH/src/google/protobuf/*.proto
+protoc --dart_out=lib/src/generated -I$PROTOBUF_PATH/src $PROTOBUF_PATH/src/google/protobuf/duration.proto
+protoc --dart_out=lib/src/generated -I$PROTOBUF_PATH/src $PROTOBUF_PATH/src/google/protobuf/empty.proto
+protoc --dart_out=lib/src/generated -I$PROTOBUF_PATH/src $PROTOBUF_PATH/src/google/protobuf/field_mask.proto
+protoc --dart_out=lib/src/generated -I$PROTOBUF_PATH/src $PROTOBUF_PATH/src/google/protobuf/timestamp.proto
 protoc --dart_out=grpc:lib/src/generated -I$GOOGLEAPIS_PATH $GOOGLEAPIS_PATH/google/pubsub/v1/pubsub.proto
 protoc --dart_out=grpc:lib/src/generated -I$GOOGLEAPIS_PATH $GOOGLEAPIS_PATH/google/pubsub/v1/schema.proto
 
