Make symbolizer usable as a local tool

The server side symbolizer seems to have fallen over and
maintaining it is too much hassle. Instead make it easy
to run this tool from command line.

Delete all server related code.

Change-Id: Iaf92892e2497595708f40b2f73ba1808896d988f
Reviewed-on: https://dart-review.googlesource.com/c/dart_ci/+/357627
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/github-label-notifier/Dockerfile b/github-label-notifier/Dockerfile
index 85e18a5..acf905d 100644
--- a/github-label-notifier/Dockerfile
+++ b/github-label-notifier/Dockerfile
@@ -5,7 +5,6 @@
 # Resolve app dependencies.
 WORKDIR /app
 COPY functions/pubspec.* functions/
-COPY symbolizer symbolizer
 WORKDIR /app/functions
 RUN dart pub get
 
diff --git a/github-label-notifier/functions/bin/server.dart b/github-label-notifier/functions/bin/server.dart
index 05e4c47..6aca044 100644
--- a/github-label-notifier/functions/bin/server.dart
+++ b/github-label-notifier/functions/bin/server.dart
@@ -10,9 +10,6 @@
 import 'package:sendgrid_mailer/sendgrid_mailer.dart' as sendgrid;
 import 'package:shelf/shelf.dart';
 import 'package:shelf_router/shelf_router.dart';
-import 'package:symbolizer/model.dart';
-import 'package:symbolizer/parser.dart';
-import 'package:symbolizer/bot.dart';
 
 import 'package:github_label_notifier/github_utils.dart';
 import 'package:github_label_notifier/redirecting_http.dart';
@@ -178,19 +175,13 @@
 /// The handler will search the body of the open issue for specific keywords
 /// and send emails to all subscribers to a specific label.
 Future<void> onIssueOpened(Map<String, dynamic> event) async {
-  SymbolizationResult? symbolizedCrashes;
-
   final repositoryName = event['repository']['full_name'];
   print("opened issue $repositoryName");
   final subscription = await db.lookupKeywordSubscription(repositoryName);
   if (subscription == null) return;
-  if (subscription.keywords.contains('crash') &&
-      containsCrash(event['issue']['body'])) {
-    symbolizedCrashes = await _trySymbolize(event['issue']);
-  }
 
-  final match = (symbolizedCrashes is SymbolizationResultOk &&
-          symbolizedCrashes.results.isNotEmpty)
+  final match = (subscription.keywords.contains('crash') &&
+          _containsCrash(event['issue']['body']))
       ? 'crash'
       : subscription.match(event['issue']['body']);
   if (match == null) {
@@ -210,51 +201,6 @@
 
   final escape = htmlEscape.convert;
 
-  final symbolizedCrashesText = symbolizedCrashes
-          ?.when(
-              ok: (results) {
-                return [
-                  '',
-                  ...results.expand((r) => [
-                        if (r.symbolized != null)
-                          '# engine ${r.engineBuild!.engineHash} ${r.engineBuild!.variant.pretty} crash'
-                        else
-                          '# engine crash',
-                        for (var note in r.notes)
-                          if (note.message != null)
-                            '# ${noteMessage[note.kind]}: ${note.message}'
-                          else
-                            '# ${noteMessage[note.kind]}',
-                        r.symbolized ?? r.crash.frames.toString(),
-                      ]),
-                  ''
-                ];
-              },
-              error: (note) => null)
-          ?.join('\n') ??
-      '';
-
-  final symbolizedCrashesHtml = symbolizedCrashes
-          ?.when(
-            ok: (results) {
-              return results.expand((r) => [
-                    if (r.symbolized != null)
-                      '<p>engine ${r.engineBuild!.engineHash} ${r.engineBuild!.variant.pretty} crash</p>'
-                    else
-                      '<p>engine crash</p>',
-                    for (var note in r.notes)
-                      if (note.message != null)
-                        '<em>${noteMessage[note.kind]}: <pre>${escape(note.message!)}</pre></em>'
-                      else
-                        '<em>${noteMessage[note.kind]}</em>',
-                    '<pre>${escape(r.symbolized ?? r.crash.frames.toString())}</pre>',
-                  ]);
-            },
-            error: (note) => null,
-          )
-          ?.join('') ??
-      '';
-
   final personalizations = [
     for (final to in subscribers)
       sendgrid.Personalization([sendgrid.Address(to)])
@@ -270,7 +216,7 @@
 Reported by $issueReporterUsername
 
 Matches keyword: $match
-$symbolizedCrashesText
+
 You are getting this mail because you are subscribed to label ${subscription.label}.
 --
 Sent by dart-github-label-notifier.web.app
@@ -279,7 +225,6 @@
 <p><strong><a href="$issueUrl">${escape(issueTitle)}</a>&nbsp;(${escape(repositoryName)}#${escape(issueNumber.toString())})</strong></p>
 <p>Reported by <a href="$issueReporterUrl">${escape(issueReporterUsername)}</a></p>
 <p>Matches keyword: <b>$match</b></p>
-$symbolizedCrashesHtml
 <p>You are getting this mail because you are subscribed to label ${subscription.label}</p>
 <hr>
 <p>Sent by <a href="https://dart-github-label-notifier.web.app/">GitHub Label Notifier</a></p>
@@ -292,18 +237,7 @@
 }
 
 Future<void> onIssueCommentCreated(Map<String, dynamic> event) async {
-  final body = event['comment']['body'];
-
-  if (Bot.isCommand(body)) {
-    final response = await http.post(
-      Uri.http(symbolizerServer, 'command'),
-      body: jsonEncode(event),
-    );
-    if (response.statusCode != HttpStatus.ok) {
-      throw WebHookError(HttpStatus.internalServerError,
-          'Failed to process ${event['comment']['html_url']}: ${response.body}');
-    }
-  }
+  // Do nothing.
 }
 
 class WebHookError {
@@ -324,23 +258,6 @@
           HttpStatus.badRequest, 'Missing $header header value.'));
 }
 
-Future<SymbolizationResult> _trySymbolize(Map<String, dynamic> body) async {
-  try {
-    final response = await http
-        .post(
-          Uri.http(symbolizerServer, 'symbolize'),
-          body: jsonEncode(body),
-        )
-        .timeout(const Duration(seconds: 20));
-    return SymbolizationResult.fromJson(jsonDecode(response.body));
-  } catch (e, st) {
-    return SymbolizationResult.error(
-        error: SymbolizationNote(
-            kind: SymbolizationNoteKind.exceptionWhileSymbolizing,
-            message: '$e\n$st'));
-  }
-}
-
 Future<http.Response> Function(Uri url,
     {Object? body,
     Encoding? encoding,
@@ -351,3 +268,14 @@
     return http.post(newUrl, body: body, encoding: encoding, headers: headers);
   };
 }
+
+final _androidCrashMarker =
+    '*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***';
+
+final _iosCrashMarker = RegExp(
+    r'(Incident Identifier:\s+([A-F0-9]+-?)+)|(Exception Type:\s+EXC_CRASH)');
+
+/// Returns [true] if the given text is likely to contain a crash.
+bool _containsCrash(String text) {
+  return text.contains(_androidCrashMarker) || text.contains(_iosCrashMarker);
+}
diff --git a/github-label-notifier/functions/pubspec.lock b/github-label-notifier/functions/pubspec.lock
index 4de53d9..5ad9575 100644
--- a/github-label-notifier/functions/pubspec.lock
+++ b/github-label-notifier/functions/pubspec.lock
@@ -13,18 +13,18 @@
     dependency: transitive
     description:
       name: _fe_analyzer_shared
-      sha256: "0816708f5fbcacca324d811297153fe3c8e047beb5c6752e12292d2974c17045"
+      sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051
       url: "https://pub.dev"
     source: hosted
-    version: "62.0.0"
+    version: "64.0.0"
   analyzer:
     dependency: transitive
     description:
       name: analyzer
-      sha256: "21862995c9932cd082f89d72ae5f5e2c110d1a0204ad06e4ebaee8307b76b834"
+      sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893"
       url: "https://pub.dev"
     source: hosted
-    version: "6.0.0"
+    version: "6.2.0"
   args:
     dependency: transitive
     description:
@@ -33,14 +33,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "2.4.2"
-  asn1lib:
-    dependency: transitive
-    description:
-      name: asn1lib
-      sha256: b74e3842a52c61f8819a1ec8444b4de5419b41a7465e69d4aa681445377398b0
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.4.1"
   async:
     dependency: "direct main"
     description:
@@ -73,14 +65,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "3.1.1"
-  corsac_jwt:
-    dependency: transitive
-    description:
-      name: corsac_jwt
-      sha256: f86d1a1ad7d4db5727ae5d68dfd4437cbcf62daabe920190fcd5425457f5f377
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0-nullsafety.1"
   coverage:
     dependency: transitive
     description:
@@ -97,14 +81,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "3.0.3"
-  dart_internal:
-    dependency: transitive
-    description:
-      name: dart_internal
-      sha256: dae3976f383beddcfcd07ad5291a422df2c8c0a8a03c52cda63ac7b4f26e0f4e
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.2.8"
   file:
     dependency: transitive
     description:
@@ -113,14 +89,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "7.0.0"
-  freezed_annotation:
-    dependency: transitive
-    description:
-      name: freezed_annotation
-      sha256: aeac15850ef1b38ee368d4c53ba9a847e900bb2c53a4db3f6881cbb3cb684338
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.0"
   frontend_server_client:
     dependency: transitive
     description:
@@ -137,14 +105,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "0.1.1"
-  github:
-    dependency: transitive
-    description:
-      name: github
-      sha256: "5640619ae3780877fe62b7837b41343350acc845c528f7b339c34c60745f2cdd"
-      url: "https://pub.dev"
-    source: hosted
-    version: "9.15.1"
   glob:
     dependency: transitive
     description:
@@ -217,14 +177,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "0.6.7"
-  json_annotation:
-    dependency: transitive
-    description:
-      name: json_annotation
-      sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.8.1"
   lints:
     dependency: "direct dev"
     description:
@@ -289,22 +241,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "1.8.3"
-  pedantic:
-    dependency: transitive
-    description:
-      name: pedantic
-      sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.11.1"
-  pointycastle:
-    dependency: transitive
-    description:
-      name: pointycastle
-      sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.7.3"
   pool:
     dependency: transitive
     description:
@@ -321,14 +257,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "2.1.4"
-  rsa_pkcs:
-    dependency: transitive
-    description:
-      name: rsa_pkcs
-      sha256: "17a52b0c010319f0d4c7bcc635eb89e2efeaec44975b3fb45f850b350a2b0513"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.1"
   sendgrid_mailer:
     dependency: "direct main"
     description:
@@ -425,13 +353,6 @@
       url: "https://pub.dev"
     source: hosted
     version: "1.2.0"
-  symbolizer:
-    dependency: "direct main"
-    description:
-      path: "../symbolizer"
-      relative: true
-    source: path
-    version: "0.0.1"
   term_glyph:
     dependency: transitive
     description:
@@ -513,4 +434,4 @@
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.0.0 <3.2.0"
+  dart: ">=3.0.0 <4.0.0"
diff --git a/github-label-notifier/functions/pubspec.yaml b/github-label-notifier/functions/pubspec.yaml
index 3f1138f..ebbd60e 100644
--- a/github-label-notifier/functions/pubspec.yaml
+++ b/github-label-notifier/functions/pubspec.yaml
@@ -20,8 +20,6 @@
   shelf: ^1.4.0
   shelf_router: ^1.1.3
   test: any
-  symbolizer:
-    path: ../symbolizer
 
 dev_dependencies:
   lints: ^2.0.1
diff --git a/github-label-notifier/functions/test/integration_test.dart b/github-label-notifier/functions/test/integration_test.dart
index 453e62d..851d74c 100644
--- a/github-label-notifier/functions/test/integration_test.dart
+++ b/github-label-notifier/functions/test/integration_test.dart
@@ -8,7 +8,6 @@
 
 import 'package:googleapis/firestore/v1.dart';
 import 'package:sendgrid_mailer/sendgrid_mailer.dart';
-import 'package:symbolizer/model.dart';
 import 'package:test/test.dart';
 
 import 'package:github_label_notifier/firestore_helpers.dart';
@@ -54,83 +53,6 @@
   return server;
 }
 
-Future<HttpServer> createSymbolizerServer(List<String> commandLog) async {
-  // Start mock Symbolizer server at the address/port specified in
-  // SYMBOLIZER_SERVER environment variable.
-  final serverAddress = Platform.environment['SYMBOLIZER_SERVER'];
-  if (serverAddress == null) {
-    throw 'SENDGRID_MOCK_SERVER environment variable is not set';
-  }
-  final serverUri = Uri.parse('http://$serverAddress');
-  final server = await HttpServer.bind(serverUri.host, serverUri.port);
-  server.listen((request) async {
-    final body = await utf8.decodeStream(request);
-    switch (request.requestedUri.path) {
-      case '/symbolize':
-        // Reply with symbolized crash.
-        SymbolizationResult result;
-        print(body);
-        if (body.contains('TRIGGER_SYMBOLIZATION_ERROR')) {
-          result = SymbolizationResult.error(
-            error: SymbolizationNote(
-                kind: SymbolizationNoteKind.exceptionWhileParsing,
-                message: 'some detailed error'),
-          );
-        } else {
-          result = SymbolizationResult.ok(results: [
-            CrashSymbolizationResult(
-                crash: Crash(
-                    engineVariant:
-                        EngineVariant(arch: 'arm', os: 'ios', mode: 'debug'),
-                    format: 'native',
-                    frames: [
-                      CrashFrame.ios(
-                        no: '00',
-                        binary: 'BINARY',
-                        pc: 0x10042,
-                        symbol: '0x',
-                        offset: 42,
-                        location: '',
-                      )
-                    ]),
-                engineBuild: EngineBuild(
-                  engineHash: 'aaabbb',
-                  variant: EngineVariant(arch: 'arm', os: 'ios', mode: 'debug'),
-                ),
-                symbolized: 'SYMBOLIZED_STACK_HERE')
-          ]);
-        }
-        await (request.response
-              ..statusCode = HttpStatus.ok
-              ..reasonPhrase = 'OK'
-              ..headers.contentType = ContentType.text
-              ..write(jsonEncode(result)))
-            .close();
-        break;
-      case '/command':
-        commandLog.add(jsonDecode(body)['comment']['body']);
-
-        // Reply with 200 OK.
-        await (request.response
-              ..statusCode = HttpStatus.ok
-              ..reasonPhrase = 'OK'
-              ..headers.contentType = ContentType.text
-              ..write('OK'))
-            .close();
-        break;
-      default: // Reply with 404.
-        await (request.response
-              ..statusCode = HttpStatus.notFound
-              ..reasonPhrase = 'Not Found'
-              ..headers.contentType = ContentType.text
-              ..write('Not Found'))
-            .close();
-        break;
-    }
-  });
-  return server;
-}
-
 void main() async {
   if (!Platform.environment.containsKey('FIRESTORE_EMULATOR_HOST')) {
     throw 'This test must run in an emulated environment via test.sh script';
@@ -204,7 +126,6 @@
         '$keywordDatabase/dart-lang\$webhook-test');
 
     sendgridMockServer = await createSendgridMockServer(sendgridRequests);
-    symbolizerServer = await createSymbolizerServer(symbolizerCommands);
     createGithubLabelNotifier();
   });
 
@@ -216,9 +137,6 @@
   tearDownAll(() async {
     // Shutdown the mock SendGrid server.
     await sendgridMockServer.close();
-
-    // Shutdown the mock symbolizer.
-    await symbolizerServer.close();
   });
 
   // Helper to send a mock GitHub event to the locally running instance of the
@@ -473,35 +391,10 @@
     expect(rs.statusCode, equals(HttpStatus.ok));
     expect(sendgridRequests.length, equals(1));
     final request = sendgridRequests.first;
-    final plainTextBody = request.body['content']
-        .firstWhere((c) => c['type'] == 'text/plain')['value'];
-    expect(plainTextBody, contains('engine aaabbb ios-arm-debug crash'));
-    expect(plainTextBody, contains('SYMBOLIZED_STACK_HERE'));
-  });
-
-  test('ok - issue opened - crash - error during symbolization', () async {
-    final rs = await sendEvent(body: makeIssueOpenedEvent(body: '''
-I had Flutter engine c_r_a_s_h on me with the following message
-
-*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
-Such c_r_a_s_h
-Much information
-TRIGGER_SYMBOLIZATION_ERROR
-'''));
-    expect(rs.statusCode, equals(HttpStatus.ok));
-    expect(sendgridRequests.length, equals(0));
-  });
-
-  test('ok - issue comment - forward bot command', () async {
-    final command = '''@flutter-symbolizer-bot aaa bbb''';
-    final rs = await sendEvent(
-        event: 'issue_comment',
-        body: makeIssueCommentEvent(
-          commentBody: command,
-          authorAssociation: 'MEMBER',
-        ));
-    expect(rs.statusCode, equals(HttpStatus.ok));
-    expect(symbolizerCommands, equals([command]));
+    expect(
+        request.body['content']
+            .firstWhere((c) => c['type'] == 'text/plain')['value'],
+        contains('Matches keyword: crash'));
   });
 }
 
diff --git a/github-label-notifier/symbolizer/README-bot.md b/github-label-notifier/symbolizer/README-bot.md
deleted file mode 100644
index 277a8b3..0000000
--- a/github-label-notifier/symbolizer/README-bot.md
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--
-This is flutter-symbolizer-bot README file. If you are making changes to
-this file update https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md
-as well
--->
-
-### Hi there 👋
-
-I am a bot that can symbolize Flutter Engine crashes. If you have any bug
-reports or questions contact @mraleph
-
-👉 **I only answer to commands of public members of Flutter GitHub org!** To
-check whether your membership is public just open your profile in Incognito
-Window and check if Flutter org badge is visible. Read more about org membership
-privacy settings [here](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/publicizing-or-hiding-organization-membership).
-
-I can automatically detect the following crashes:
-
-- Android crashes marked with `*** *** *** ... *** *** ***` line.
-- iOS crashes starting with `Incident Identifier: ...` line.
-
-For symbolization I would need to know engine commit hash and build mode. I
-support extracting engine version from `flutter doctor` output (with or
-without `-v`) and I can sometimes guess build mode (e.g. by using `Build ID`
-included into stack traces on Android).
-
-However often reports don't include all required information or don't use native
-format so you would need to provide me with additional hints, see
-[Commands](#commands) below.
-
-### Commands
-
-When you mention me in the comment you can include a number of
-_symbolization overrides_ which would fill in the gaps in information for me.
-
-```
-@flutter-symbolizer-bot [engine#<sha>|flutter#<commit>] [profile|release|debug] [x86|arm|arm64|x64]
-```
-
-**Important ⚠️**: `@flutter-symbolizer-bot` **MUST** be the very first thing
-in your comment.
-
-- `engine#<sha>` allows to specify which _engine commit_ I should use;
-- `flutter#<commit>` allows to specify which Flutter Framework commit I
-  should use (this is just another way of specifiying engine commit);
-- `profile|release|debug` tells me which _build mode_ I should use (iOS builds
-  only have `release` symbols available though);
-- `x86|arm|arm64|x64` tells me which _architecture_ I should use.
-
-You can point me to a specific comment by including the link to it:
-
-```
-@flutter-symbolizer-bot [link|this]
-```
-
-- `link`, which looks like
-  `https://github.com/flutter/flutter/issues/ISSUE#issue(comment)?-ID`, asks me
-   to look for crashes in the specific comment;
-- `this` asks me to symbolize content of
-  _the comment which contains the command_.
-
-If your backtrace comes from Crashlytics with lines that look like this:
-
-```
-4  Flutter                        0x106013134 (Missing)
-```
-
-You would need to tell me `@flutter-symbolizer-bot force ios [arm64|arm] [engine#<sha>|flutter#<commit>] link|this`:
-
-- `force ios` tells me to ignore native crash markers and simply look for lines
-  that match `ios` backtrace format;
-- `[arm64|arm]` gives me information about architecture, which is otherwise
-  missing from the report;
-- `engine#sha|flutter#commit` gives me engine version;
-- `link|this` specifies which comment to symbolize. Note ⚠️: because this is a
-  departure from native crash report formats you *must* tell me which comment
-  to symbolize manually
-
-If your backtrace has lines that look like this:
-
-```
-0x0000000105340708(Flutter + 0x002b4708)
-```
-
-You would need to tell me `@flutter-symbolizer-bot internal [arm64|arm] [engine#<sha>|flutter#<commit>] link|this`:
-
-- `internal` tells me to ignore native crash markers and look for lines that
-  match _internal_ backtrace format.
-
-### Note about Relative PCs
-
-To symbolize stack trace correctly I need to know PC relative to binary image
-load base. Native crash formats usually include this information:
-
-- On Android `pc` column actually contains relative PCs rather then absolute.
-  Though Android versions prior to Android 11 have issues with their unwinder
-  which makes these relative PCs skewed in different ways (see
-  [this bug](https://github.com/android/ndk/issues/1366) for more information).
-  I try my best to correct for these known issues;
-- On iOS I am looking for lines like this `Flutter + <rel-pc>` which gives me
-  necessary information.
-
-Some crash formats (Crashlytics) do not contain neither load base nor relative
-PCs. In this case I try to determine load base heuristically based on the set
-of return addresses available in the backtrace: I look through Flutter Engine
-binary for all call sites and then iterate through potential load bases to see
-if one of them makes all of PCs present in the backtrace fall onto callsites.
-The pattern of call sites in the binary is often unique enough for me to be
-able to determine a single possible load base based on 3-4 unique return
-addresses.
\ No newline at end of file
diff --git a/github-label-notifier/symbolizer/README.md b/github-label-notifier/symbolizer/README.md
index ea09771..f954c20 100644
--- a/github-label-notifier/symbolizer/README.md
+++ b/github-label-notifier/symbolizer/README.md
@@ -1,21 +1,81 @@
 This folder contains implementation of symbolization tooling capable of
-extracting Android and iOS crashes from plain text comments on GitHub and
-then automatically symbolize these crash reports using Flutter Engine symbols
-stored in the Cloud Storage.
+extracting Android and iOS crashes from plain text comments on GitHub or
+from local text files and then automatically symbolize these crash reports
+using Flutter Engine symbols stored in the Cloud Storage.
 
-# `bin/server.dart`
+# Using this locally
 
-Server exposing simple HTTP API to this functionality. It has two endpoints:
+```
+$ dart pub global activate -sgit https://github.com/dart-lang/dart_ci.git --git-path github-label-notifier/symbolizer/
+$ dart pub global run symbolizer:symbolize <file-or-uri> ["overrides"]
+$ dart pub global run symbolizer:symbolize --help
+```
 
-- `POST /symbolize` with GitHub's `issue` JSON payload runs symbolization on the
-  issue's body and returns result as a JSON serialized list of
-  `SymbolizationResult`.
-- `POST /command` with GitHub's [`issue_comment`](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events/webhook-events-and-payloads#issue_comment)
-  payload executes the given comment as a bot command (if it represents one).
+# Symbolization overrides
 
-Note: the server itself does not listen to GitHub events - instead there is a
-Cloud Function exposed as a GitHub WebHook which routes relevant
-`issue_comment` events to it.
+Not all information might be available in the stack trace itself. In this case
+_symbolization overrides_ can be used to fill in gaps. They have the following
+format:
+
+```
+[engine#<sha>|flutter#<commit>] [profile|release|debug] [x86|arm|arm64|x64]
+```
+
+- `engine#<sha>` - use symbols for specific _engine commit_;
+- `flutter#<commit>` use symbols for specific Flutter Framework commit
+  (this is just another way of specifiying engine commit);
+- `profile|release|debug` use symbols for specific _build mode_ (iOS builds
+  only have `release` symbols available though);
+- `x86|arm|arm64|x64` use symbols for specific _architecture_.
+
+If your backtrace comes from Crashlytics with lines that look like this:
+
+```
+4  Flutter                        0x106013134 (Missing)
+```
+
+You would need to use `force ios [arm64|arm] [engine#<sha>|flutter#<commit>]`
+overrides:
+
+- `force ios` instructs tooling to ignore native crash markers and simply look
+  for lines that match `ios` backtrace format;
+- `[arm64|arm]` gives information about architecture, which is otherwise
+  missing from the report;
+- `engine#sha|flutter#commit` gives engine version;
+
+If your backtrace has lines that look like this:
+
+```
+0x0000000105340708(Flutter + 0x002b4708)
+```
+
+You would need to use `internal [arm64|arm] [engine#<sha>|flutter#<commit>]`
+overrides:
+
+- `internal` instructs tooling to ignore native crash markers and look for
+  lines that match this special _internal_ backtrace format.
+
+### Note about Relative PCs
+
+To symbolize stack trace correctly symbolizer needs to know PC relative to
+binary image load base. Native crash formats usually include this information:
+
+- On Android `pc` column actually contains relative PCs rather then absolute.
+  Though Android versions prior to Android 11 have issues with their unwinder
+  which makes these relative PCs skewed in different ways (see
+  [this bug](https://github.com/android/ndk/issues/1366) for more information).
+  This package tries best to correct for these known issues;
+- On iOS crash parser is looking for lines like this `Flutter + <rel-pc>`
+  which gives it necessary information.
+
+Some crash formats (Crashlytics) do not contain neither load base nor relative
+PCs. In this case symbolizer will try to determine load base heuristically
+based on the set of return addresses available in the backtrace: it will look
+through Flutter Engine binary for all call sites and then iterate through
+potential load bases to see if one of them makes all of PCs present in the
+backtrace fall onto callsites. The pattern of call sites in the binary is often
+unique enough for the symbolizer to be able to determine a single possible load
+base based on 3-4 unique return addresses.
 
 # Scripts
 
@@ -26,30 +86,17 @@
 you don't hit GitHub's API quota limits for unauthorized users.
 
 ```console
-$ bin/configure.dart --github-token ... --sendgrid-token ... --failure-email ...
+$ bin/configure.dart --github-token ...
 ```
 
-## `bin/command.dart`
-
-```console
-$ bin/command.dart [--act] <issue-number> 'keywords*'
-```
-
-Execute the given string of keywords as a `@flutter-symbolizer-bot` command in
-context of the issue with the given `issue-number` number.
-
-By default would simply print `@flutter-symbolizer-bot` response to stdout.
-
-If `--act` is passed then bot would actually post a comment with its response
-to the issue using GitHub OAuth token from `.config.json`.
-
 ## `bin/symbolize.dart`
 
 ```console
-$ bin/symbolize.dart <input-file> 'keywords*'
+$ bin/symbolize.dart <input-file|URI> 'keywords*'
 ```
 
-Symbolize contents of the given file using overrides specified through keywords.
+Symbolize contents of the given file or GitHub comment or issue using overrides
+specified through keywords.
 
 # Development
 
@@ -61,7 +108,7 @@
 Run `bin/configure.dart` to create `.config.json`.
 
 ```
-bin/configure.dart --github-token ... --sendgrid-token ... --failure-email ...
+bin/configure.dart --github-token ...
 ```
 
 ## NDK tooling
@@ -80,13 +127,13 @@
 `model.dart` run:
 
 ```console
-$ pub run build_runner build
+$ dart run build_runner build
 ```
 
 # Testing
 
 ```console
-$ pub run test -j1 --no-chain-stack-traces
+$ dart test test -j1 --no-chain-stack-traces
 ```
 
 - `-j1` is needed to avoid racy access to symbols cache from multiple
@@ -97,24 +144,6 @@
 To update expectation files set `REGENERATE_EXPECTATIONS` environment
 variable to `true` (`export REGENERATE_EXPECTATIONS=true`).
 
-# Deployment
-
-Bot is running on `crash-symbolizer` Compute Engine instance and is kept
-alive by `superviserd`. The GCE instance is not directly reachable from
-the outside world. To deploy a new version run:
-
-```console
-$ GITHUB_TOKEN=... SENDGRID_TOKEN=... FAILURE_EMAIL=... ./deploy.sh
-```
-
-- `GITHUB_TOKEN` provides OAuth token for `flutter-symbolizer-bot` account;
-- `SENDGRID_TOKEN` provides SendGrid API token
-- `FAILURE_EMAIL` configures email that bot should report exceptions to.
-- Under certain conditions your machine might not be able to connect to
-  GCE instance. In this case you will need to proxy your deployment through
-  another machine that *can* connect to the instance. You can specify
-  this "proxy" machine via `DEPLOYMENT_PROXY`.
-
 ## SDK version
 
 We deploy the code in form of Kernel binary - which means your local SDK
diff --git a/github-label-notifier/symbolizer/bin/command.dart b/github-label-notifier/symbolizer/bin/command.dart
deleted file mode 100755
index 008d681..0000000
--- a/github-label-notifier/symbolizer/bin/command.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:args/args.dart';
-import 'package:github/github.dart';
-import 'package:logging/logging.dart';
-import 'package:sendgrid_mailer/sendgrid_mailer.dart';
-import 'package:symbolizer/bot.dart';
-import 'package:symbolizer/config.dart';
-import 'package:symbolizer/ndk.dart';
-import 'package:symbolizer/symbolizer.dart';
-import 'package:symbolizer/symbols.dart';
-
-const isDev = bool.fromEnvironment('DEV');
-
-final bindHostname = isDev
-    ? InternetAddress.loopbackIPv4
-    : 'crash-symbolizer.c.dart-ci.internal';
-
-final log = Logger('server');
-
-final config = loadConfigFromFile();
-
-final argParser = ArgParser(allowTrailingOptions: false)
-  ..addFlag(
-    'act',
-    help: 'Post comment on GitHub (by default '
-        'results are printed into stdout instead)',
-    negatable: false,
-    defaultsTo: false,
-  );
-
-Future<void> main(List<String> args) async {
-  final opts = argParser.parse(args);
-  if (opts.rest.length != 2) {
-    print('''Usage: command.dart [--act] <issue-number> <command>
-${argParser.usage}''');
-    exit(1);
-  }
-  final issueNumber = int.parse(opts.rest[0]);
-  final command = opts.rest[1];
-
-  Logger.root.level = Level.ALL;
-  Logger.root.onRecord.listen((record) {
-    print('${record.level.name}: ${record.time}: ${record.message}');
-  });
-
-  final mailer = Mailer(config.sendgridToken);
-  final ndk = Ndk();
-  final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
-  final github = GitHub(auth: Authentication.withToken(config.githubToken));
-
-  final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
-  final bot = Bot(
-    github: github,
-    symbolizer: symbolizer,
-    mailer: mailer,
-    failuresEmail: config.failureEmail,
-    dryRun: !opts['act'],
-  );
-
-  final repo = RepositorySlug('flutter', 'flutter');
-  await bot.executeCommand(
-    repo,
-    await github.issues.get(repo, issueNumber),
-    IssueComment(
-        body: '${Bot.accountMention} $command',
-        user: User(
-          login: Platform.environment['USER'],
-        )),
-    authorized: true,
-  );
-  github.dispose();
-}
diff --git a/github-label-notifier/symbolizer/bin/configure.dart b/github-label-notifier/symbolizer/bin/configure.dart
index 272de25..341c55f 100755
--- a/github-label-notifier/symbolizer/bin/configure.dart
+++ b/github-label-notifier/symbolizer/bin/configure.dart
@@ -13,17 +13,11 @@
   ..addOption('github-token',
       help: 'GitHub OAuth token',
       defaultsTo: Platform.environment['GITHUB_TOKEN'])
-  ..addOption('sendgrid-token',
-      help: 'SendGrid API token',
-      defaultsTo: Platform.environment['SENDGRID_TOKEN'])
-  ..addOption('failure-email',
-      help: 'Email for failure reports',
-      defaultsTo: Platform.environment['FAILURE_EMAIL'])
   ..addOption('output', help: 'Config to write', defaultsTo: '.config.json');
 
 void main(List<String> args) {
   final opts = parser.parse(args);
-  for (var opt in ['github-token', 'sendgrid-token', 'failure-email']) {
+  for (var opt in ['github-token']) {
     if (opts[opt].isEmpty) {
       throw 'Pass non-empty value via --$opt or through'
           ' ${opt.toUpperCase().replaceAll('-', '_')} environment variable';
@@ -32,8 +26,6 @@
 
   final config = ServerConfig(
     githubToken: opts['github-token'],
-    sendgridToken: opts['sendgrid-token'],
-    failureEmail: opts['failure-email'],
   );
   File(opts['output']).writeAsStringSync(jsonEncode(config));
 }
diff --git a/github-label-notifier/symbolizer/bin/server.dart b/github-label-notifier/symbolizer/bin/server.dart
deleted file mode 100755
index 050e622..0000000
--- a/github-label-notifier/symbolizer/bin/server.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:github/github.dart';
-import 'package:logging/logging.dart';
-import 'package:sendgrid_mailer/sendgrid_mailer.dart';
-import 'package:symbolizer/bot.dart';
-import 'package:symbolizer/config.dart';
-import 'package:symbolizer/ndk.dart';
-import 'package:symbolizer/symbolizer.dart';
-import 'package:symbolizer/symbols.dart';
-import 'package:symbolizer/server.dart';
-
-const isDev = bool.fromEnvironment('DEV');
-
-final bindHostname = isDev
-    ? InternetAddress.loopbackIPv4
-    : 'crash-symbolizer.c.dart-ci.internal';
-
-final log = Logger('server');
-
-final config = loadConfigFromFile();
-
-Future<void> main() async {
-  Logger.root.level = Level.ALL;
-  Logger.root.onRecord.listen((record) {
-    print('${record.level.name}: ${record.time}: ${record.message}');
-  });
-
-  final mailer = Mailer(config.sendgridToken);
-  final ndk = Ndk();
-  final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
-  final github = GitHub(auth: Authentication.withToken(config.githubToken));
-
-  final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
-  final bot = Bot(
-      github: github,
-      symbolizer: symbolizer,
-      mailer: mailer,
-      failuresEmail: config.failureEmail);
-
-  await serve(
-    bindHostname,
-    4040,
-    symbolizer: symbolizer,
-    bot: bot,
-  );
-}
diff --git a/github-label-notifier/symbolizer/bin/symbolize.dart b/github-label-notifier/symbolizer/bin/symbolize.dart
index 36911e4..df1669a 100755
--- a/github-label-notifier/symbolizer/bin/symbolize.dart
+++ b/github-label-notifier/symbolizer/bin/symbolize.dart
@@ -5,41 +5,218 @@
 
 /// Primitive CLI for the symbolizer. Usage:
 ///
-///    symbolize <input-file> [overrides]
+///    symbolize <input-file>|<github-uri> [overrides]
 ///
 
 import 'dart:io';
 
+import 'package:ansicolor/ansicolor.dart';
 import 'package:github/github.dart';
 import 'package:logging/logging.dart';
-import 'package:symbolizer/config.dart';
+import 'package:path/path.dart' as p;
+
+import 'package:symbolizer/model.dart';
 import 'package:symbolizer/ndk.dart';
 import 'package:symbolizer/symbolizer.dart';
 import 'package:symbolizer/symbols.dart';
-import 'package:symbolizer/bot.dart';
 
-final config = loadConfigFromFile();
+final githubIssueUriRe = RegExp(
+    r'https://github.com/(?<org>[-\w]+)/(?<repo>[-\w]+)/issues/(?<issue>\d+)(?<anchor>#issue(comment)?-\d+)?');
+
+Future<String> loadContent(GitHub github, String resource) async {
+  final match = githubIssueUriRe.firstMatch(resource);
+  if (match != null) {
+    final orgName = match.namedGroup('org')!;
+    final repoName = match.namedGroup('repo')!;
+    final issueNumber = int.parse(match.namedGroup('issue')!);
+    final anchor = match.namedGroup('anchor');
+
+    final int? commentId;
+    if (anchor != null && anchor.startsWith('#issuecomment-')) {
+      commentId = int.parse(anchor.split('-').last);
+    } else {
+      commentId = null;
+    }
+
+    final slug = RepositorySlug(orgName, repoName);
+    if (commentId != null) {
+      final comment = await github.issues.getComment(slug, commentId);
+      return comment.body ?? '';
+    } else {
+      final issue = await github.issues.get(slug, issueNumber);
+      return issue.body;
+    }
+  } else {
+    return File(resource).readAsString();
+  }
+}
 
 void main(List<String> args) async {
+  if (args.isEmpty ||
+      args.length > 2 ||
+      args.contains('-h') ||
+      args.contains('--help')) {
+    print('''
+Usage: symbolize <file-or-uri> ["<overrides>"]
+
+file-or-uri can be either a path to the local text file or a URI
+pointing to an issue or an issue comment on GitHub.
+
+Supported URI formats:
+* https://github.com/<org>/<repo>/issues/<issuenum>
+* https://github.com/<org>/<repo>/issues/<issuenum>#issue-<id>
+* https://github.com/<org>/<repo>/issues/<issuenum>#issuecomment-<id>
+
+Overrides argument can contain the following components:
+
+* engine#<sha> - use specific engine commit
+* flutter#<commit> - use specific flutter commit
+* profile|release|debug - use specific build mode
+* x86|arm|arm64|x64 - use specific engine architecture
+
+Additionally you can specify:
+
+* force ios - force symbolization of partial Mac OS / iOS / Crashlytics
+              reports which don't contain all necessary markers. This
+              forces symbolizer to look for frames like this:
+
+              4  Flutter                        0x106013134 (Missing)
+
+* internal - force symbolization of stacks which look like:
+
+             0x0000000105340708(Flutter + 0x002b4708)
+''');
+    exit(1);
+  }
+
   Logger.root.level = Level.ALL;
   Logger.root.onRecord.listen((record) {
     print('${record.level.name}: ${record.time}: ${record.message}');
   });
 
-  final ndk = Ndk();
-  final symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
+  final llvmTools = LlvmTools.findTools();
+  if (llvmTools == null) {
+    print('''
+Failed to locate LLVM tools (llvm-{symbolizer,readobj,objdump}).
+
+Either install them globally so that they are available in the \$PATH or
+install Android NDK.
+''');
+    exit(1);
+  }
+
+  final ndk = Ndk(llvmTools: llvmTools);
+  final symbols = SymbolsCache(
+      path: p.join(Directory.systemTemp.path, 'symbols-cache'), ndk: ndk);
   final github = GitHub();
 
   final symbolizer = Symbolizer(symbols: symbols, ndk: ndk, github: github);
-  final input = File(args.first).readAsStringSync();
-
-  final command = args.length >= 2
-      ? Bot.parseCommand(0, '${Bot.accountMention} ${args.skip(1).join(' ')}')
-      : Bot.parseCommand(0, input);
 
   try {
-    print(await symbolizer.symbolize(input, overrides: command?.overrides));
+    final input = await loadContent(github, args.first);
+
+    final overrides = args.length >= 2
+        ? SymbolizationOverrides.tryParse(args.skip(1).join(' '))
+        : null;
+
+    _printResult(await symbolizer.symbolize(input, overrides: overrides));
   } finally {
     github.dispose();
   }
 }
+
+final errorPen = AnsiPen()..red();
+final notePen = AnsiPen()..gray();
+final successPen = AnsiPen()..green();
+final stackPen = AnsiPen()..black(bold: true);
+
+String _reindent(String str, {String padding = '  '}) {
+  return '  ${str.split('\n').join('\n$padding')}';
+}
+
+/// Pretty print the given [SymbolizationResult] to stdout.
+void _printResult(SymbolizationResult symbolized) async {
+  final buf = StringBuffer();
+
+  switch (symbolized) {
+    case SymbolizationResultOk(:final results):
+      for (var result in results) {
+        buf.write('''
+
+--------------------------------------------------------------------------------
+''');
+        bool success;
+        switch (result) {
+          case CrashSymbolizationResult(
+              :final symbolized?,
+              engineBuild: EngineBuild(
+                engineHash: final engineHash,
+                variant: EngineVariant(:final os, :final arch, :final mode)
+              )
+            ):
+            success = true;
+            buf.writeln(successPen(
+                'symbolized using symbols for $engineHash $os-$arch-$mode\n'));
+            buf.writeln(stackPen(_reindent(symbolized)));
+
+          default:
+            success = false;
+            buf.writeln(errorPen('Found crash but failed to symbolize it.\n'));
+            final addrSize = result.crash.frames
+                    .map((frame) => frame.pc == (frame.pc & 0xFFFFFFFF))
+                    .every((v) => v)
+                ? 8
+                : 16;
+
+            for (var frame in result.crash.frames) {
+              switch (frame) {
+                case AndroidCrashFrame(
+                    :final no,
+                    :final pc,
+                    :final binary,
+                    :final rest,
+                  ):
+                  buf.writeln(stackPen(
+                      '  #$no ${pc.toRadixString(16).padLeft(addrSize, '0')} $binary $rest'));
+
+                default:
+                  buf.writeln(stackPen('  ${frame.pc} ${frame.binary}'));
+              }
+            }
+            buf.writeln();
+        }
+
+        final pen = success ? notePen : errorPen;
+        for (var note in result.notes) {
+          buf.write(pen('${noteMessage[note.kind]}'));
+          final message = note.message;
+          if (message != null && message.isNotEmpty) {
+            buf.write(pen(':\n${_reindent(message)}'));
+          }
+          buf.write('');
+        }
+
+        buf.writeln('''
+
+--------------------------------------------------------------------------------
+''');
+      }
+    case SymbolizationResultError(error: final note):
+      buf.write('''
+
+--------------------------------------------------------------------------------
+''');
+      buf.write(errorPen('${noteMessage[note.kind]}'));
+      final message = note.message;
+      if (message != null && message.isNotEmpty) {
+        buf.write(errorPen(':\n${_reindent(message)}'));
+      }
+      buf.write('');
+      buf.writeln('''
+
+--------------------------------------------------------------------------------
+''');
+  }
+
+  print(buf);
+}
diff --git a/github-label-notifier/symbolizer/deploy.sh b/github-label-notifier/symbolizer/deploy.sh
deleted file mode 100755
index 31043cb..0000000
--- a/github-label-notifier/symbolizer/deploy.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2020, 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.
-
-set -xe
-
-for BINARY in "llvm-symbolizer" "llvm-objdump" "llvm-readobj"; do
-  if [[ ! -f "tools/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/${BINARY}" ]]; then
-    echo "Missing linux-x86_64 build of ${BINARY}."
-    echo "Point get-tools-from-ndk.sh to Linux NDK to extract it."
-    exit 1
-  fi
-done
-
-DART_VERSION=$(dart --version 2>&1 | grep -o -e '\d*\.\d*.\d*')
-
-if [[ $DART_VERSION != "2.18.0" ]]; then
-  echo "Version mismatch with server version: $DART_VERSION expected 2.18.0"
-  exit 1
-fi
-
-# Run all tests
-pub run test --no-chain-stack-traces -j1
-
-rm -rf deploy
-mkdir -p deploy/symbolizer
-dart --snapshot-kind=kernel --snapshot=deploy/symbolizer/symbolizer.dill bin/server.dart
-cp -r tools deploy/symbolizer/tools
-dart bin/configure.dart --output=deploy/symbolizer/.config.json \
-                        --github-token=$GITHUB_TOKEN            \
-                        --sendgrid-token=$SENDGRID_TOKEN        \
-                        --failure-email=$FAILURE_EMAIL
-pushd deploy
-zip -r symbolizer.zip symbolizer
-rm -rf symbolizer
-popd
-
-cat <<EOT >deploy/deploy.sh
-#!/bin/sh
-
-set -ex
-
-DEPLOY_CMD='rm -rf symbolizer && unzip symbolizer.zip && sudo supervisorctl restart all'
-gcloud beta compute scp --zone "us-central1-a" --project "dart-ci" symbolizer.zip crash-symbolizer:~/
-gcloud beta compute ssh --zone "us-central1-a" --project "dart-ci" --command "\$DEPLOY_CMD" crash-symbolizer
-EOT
-chmod +x deploy/deploy.sh
-
-if [[ -z "$DEPLOYMENT_PROXY" ]]; then
-  cd deploy && ./deploy.sh
-else
-  scp deploy/symbolizer.zip $DEPLOYMENT_PROXY:/tmp/symbolizer.zip
-  scp deploy/deploy.sh $DEPLOYMENT_PROXY:/tmp/deploy.sh
-  ssh $DEPLOYMENT_PROXY 'cd /tmp && ./deploy.sh'
-fi
diff --git a/github-label-notifier/symbolizer/lib/bot.dart b/github-label-notifier/symbolizer/lib/bot.dart
deleted file mode 100644
index cdedb2a..0000000
--- a/github-label-notifier/symbolizer/lib/bot.dart
+++ /dev/null
@@ -1,525 +0,0 @@
-// Copyright (c) 2020, 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.
-
-/// Implementation of @flutter-symbolizer-bot.
-///
-/// The bot is triggered by command comments starting with bot mention
-/// and followed by zero of more keywords.
-///
-/// See README-bot.md for bot command documentation.
-library symbolizer.bot;
-
-import 'dart:convert';
-
-import 'package:github/github.dart';
-import 'package:logging/logging.dart';
-import 'package:sendgrid_mailer/sendgrid_mailer.dart';
-
-import 'package:symbolizer/model.dart';
-import 'package:symbolizer/parser.dart';
-import 'package:symbolizer/symbolizer.dart';
-
-final _log = Logger(Bot.account);
-
-class Bot {
-  final GitHub github;
-  final Symbolizer symbolizer;
-  final Mailer? mailer;
-  final String? failuresEmail;
-  final bool dryRun;
-
-  Bot({
-    required this.github,
-    required this.symbolizer,
-    required this.mailer,
-    required this.failuresEmail,
-    this.dryRun = false,
-  });
-
-  static final account = 'flutter-symbolizer-bot';
-  static final accountMention = '@$account';
-
-  /// Returns [true] if the given [text] is potentially a command to the bot.
-  static bool isCommand(String text) {
-    return text.startsWith(Bot.accountMention);
-  }
-
-  /// Parse the given [text] as a command to the bot. See the library doc
-  /// comment at the beginning of the file for information about the command
-  /// format.
-  static BotCommand? parseCommand(int issueNumber, String text) {
-    final command = text.split('\n').first;
-    if (!isCommand(command)) {
-      return null;
-    }
-
-    final issueNumberStr = issueNumber.toString();
-
-    var symbolizeThis = false;
-    final Set<String> worklist = <String>{};
-    String? engineHash;
-    String? flutterVersion;
-    String? os;
-    String? arch;
-    String? mode;
-    String? format;
-    var force = false;
-
-    // Command is just a sequence of keywords which specify which comments
-    // to symbolize and which symbols to use.
-    for (var keyword in command.split(' ').skip(1)) {
-      switch (keyword) {
-        case 'this':
-          symbolizeThis = true;
-          break;
-        case 'x86':
-        case 'arm':
-        case 'arm64':
-        case 'x64':
-          arch = keyword;
-          break;
-        case 'debug':
-        case 'profile':
-        case 'release':
-          mode = keyword;
-          break;
-        case 'internal':
-          format = 'internal';
-          break;
-        case 'force':
-          force = true;
-          break;
-        case 'ios':
-          os = 'ios';
-          break;
-        default:
-          // Check if this keyword is a link to an comment on this issue.
-          var m = _commentLinkPattern.firstMatch(keyword);
-          if (m != null) {
-            if (m.namedGroup('issueNumber') == issueNumberStr) {
-              worklist.add(m.namedGroup('ref')!);
-            }
-            break;
-          }
-
-          // Check if this keyword is an engine hash.
-          m = _engineHashPattern.firstMatch(keyword);
-          if (m != null) {
-            engineHash = m.namedGroup('sha');
-            break;
-          }
-
-          m = _flutterHashOrVersionPattern.firstMatch(keyword);
-          if (m != null) {
-            flutterVersion = m.namedGroup('version');
-            break;
-          }
-          break;
-      }
-    }
-
-    return BotCommand(
-      symbolizeThis: symbolizeThis,
-      worklist: worklist,
-      overrides: SymbolizationOverrides(
-        arch: arch,
-        engineHash: engineHash,
-        flutterVersion: flutterVersion,
-        mode: mode,
-        os: os,
-        force: force,
-        format: format,
-      ),
-    );
-  }
-
-  /// Execute command contained in the given [commandComment] posted on the
-  /// [issue] in the repository [repo].
-  Future<void> executeCommand(
-    RepositorySlug repo,
-    Issue issue,
-    IssueComment commandComment, {
-    required bool authorized,
-  }) async {
-    if (!authorized) {
-      await github.issues.createComment(repo, issue.number, '''
-@${commandComment.user!.login} Sorry, only **public members of Flutter org** can trigger my services.
-
-Check your privacy settings as described [here](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/publicizing-or-hiding-organization-membership).
-''');
-      return;
-    }
-
-    final command = parseCommand(issue.number, commandComment.body!);
-    if (command == null) {
-      return;
-    }
-
-    // Comments which potentially contain crashes by their id.
-    final worklist = <_Comment>{};
-    if (command.shouldProcessAll) {
-      worklist.addAll(await _processAllComments(repo, issue));
-    } else {
-      if (command.symbolizeThis) {
-        worklist.add(_Comment.fromComment(commandComment));
-      }
-
-      // Process worklist from the command and fetch comment bodies.
-      for (var ref in command.worklist) {
-        // ref has one of the following formats: issue-id or issuecomment-id
-        final c = ref.split('-');
-        final id = int.parse(c[1]);
-        if (c[0] == 'issue') {
-          worklist.add(_Comment.fromIssue(issue));
-        } else {
-          try {
-            final comment = await github.issues.getComment(repo, id);
-            worklist.add(_Comment.fromComment(comment));
-          } catch (e) {
-            // Ignore.
-          }
-        }
-      }
-    }
-
-    // Process comments from the worklist.
-    await _symbolizeGiven(
-        repo, issue, commandComment.user!, worklist, command.overrides);
-  }
-
-  /// Find all comments on the [issue] which potentially contain crashes
-  /// and were not previously symbolized by the bot.
-  Future<Set<_Comment>> _processAllComments(
-      RepositorySlug repo, Issue issue) async {
-    _log.info(
-        'Requested to symbolize all comments on ${repo.fullName}#${issue.number}');
-
-    // Dictionary of comments to symbolize by their id.
-    final worklist = <_Comment>{};
-    final alreadySymbolized = <int>{};
-
-    // Collect all comments which might contain crashes in the worklist
-    // and ids of already symbolized comments in the [alreadySymbolized] set.
-    if (containsCrash(issue.body)) {
-      worklist.add(_Comment.fromIssue(issue));
-    }
-    await for (var comment
-        in github.issues.listCommentsByIssue(repo, issue.number)) {
-      if (comment.user!.login == Bot.account) {
-        // From comments by the bot extract ids of already symbolized comments.
-        // Bot adds it to its comments as a JSON encoded object within
-        // HTML comment: <!-- {"symbolized": [id0, id1, ...]} -->
-        final m = _botInfoPattern.firstMatch(comment.body!);
-        if (m != null) {
-          final state = jsonDecode(m.namedGroup('json')!.trim());
-          if (state is Map<String, dynamic> &&
-              state.containsKey('symbolized')) {
-            alreadySymbolized
-                .addAll((state['symbolized'] as List<dynamic>).cast<int>());
-          }
-        }
-      } else if (containsCrash(comment.body!)) {
-        worklist.add(_Comment.fromComment(comment));
-      }
-    }
-
-    _log.info(
-        'Found comments with crashes ${worklist.ids}, and already symbolized $alreadySymbolized');
-    alreadySymbolized.forEach(worklist.remove);
-    return worklist;
-  }
-
-  /// Symbolize crashes from all comments in the [worklist] using the given
-  /// [overrides] and post response on the issue.
-  Future<void> _symbolizeGiven(
-      RepositorySlug repo,
-      Issue issue,
-      User commandUser,
-      Set<_Comment> worklist,
-      SymbolizationOverrides overrides) async {
-    _log.info('Symbolizing ${worklist.ids} with overrides {$overrides}');
-
-    // Symbolize all collected comments.
-    final Map<int, SymbolizationResult> symbolized =
-        <int, SymbolizationResult>{};
-    for (var comment in worklist) {
-      final result =
-          await symbolizer.symbolize(comment.body, overrides: overrides);
-      if (result is SymbolizationResultError ||
-          (result is SymbolizationResultOk && result.results.isNotEmpty)) {
-        symbolized[comment.id] = result;
-      }
-    }
-
-    if (symbolized.isEmpty) {
-      await github.issues.createComment(repo, issue.number, '''
-@${commandUser.login} No crash reports found. I used the following overrides
-when looking for reports
-
-```
-$overrides
-```
-
-Note that I can only find native Android and iOS crash reports automatically,
-you need to explicitly point me to crash reports in other supported formats.
-
-If the crash report is embedded into a log and prefixed with additional
-information I might not be able to automatically strip those prefixes.
-Currently I only support `flutter run -v`, `adb logcat` and device lab logs.
-
-See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details on how to do that.
-''');
-      return;
-    }
-
-    // Post a comment containing all successfully symbolized crashes.
-    _postResultComment(repo, issue, worklist, symbolized);
-    _mailFailures(repo, issue, worklist, symbolized);
-  }
-
-  /// Post a comment on the issue commenting successfully symbolized crashes.
-  void _postResultComment(RepositorySlug repo, Issue issue,
-      Set<_Comment> comments, Map<int, SymbolizationResult> symbolized) async {
-    if (symbolized.isEmpty) {
-      return;
-    }
-
-    final successes = _getOnlySuccesses(comments, symbolized);
-    final failures = _getOnlyFailures(comments, symbolized);
-
-    final buf = StringBuffer();
-    for (var entry in successes.entries) {
-      for (var result in entry.value.results) {
-        buf.write('''
-crash from ${entry.key} symbolized using symbols for `${result.engineBuild!.engineHash}` `${result.engineBuild!.variant.os}-${result.engineBuild!.variant.arch}-${result.engineBuild!.variant.mode}`
-```
-${result.symbolized}
-```
-''');
-        for (var note in result.notes) {
-          buf.write('_(${noteMessage[note.kind]}');
-          final message = note.message;
-          if (message != null && message.isNotEmpty) {
-            buf.write(': ');
-            buf.write(message);
-          }
-          buf.write(')_');
-        }
-        buf.writeln();
-      }
-    }
-
-    if (failures.isNotEmpty) {
-      buf.writeln();
-      // GitHub allows <details> HTML elements
-      // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details
-      buf.writeln('''
-<details>
-<summary>There were failures processing the request</summary>
-''');
-
-      void appendNote(SymbolizationNote note) {
-        buf.write('* ${noteMessage[note.kind]}');
-        final message = note.message;
-        if (message != null && message.isNotEmpty) {
-          if (message.contains('\n')) {
-            buf.writeln(':');
-            buf.write('''
-```
-$message
-```'''
-                .indentBy('    '));
-          } else {
-            buf.writeln(': `$message`');
-          }
-        }
-        buf.writeln('');
-      }
-
-      for (var entry in failures.entries) {
-        entry.value.when(ok: (results) {
-          for (var result in results) {
-            buf.writeln('''
-When processing ${entry.key} I found crash
-
-```
-${result.crash}
-```
-
-but failed to symbolize it with the following notes:
-''');
-            result.notes.forEach(appendNote);
-          }
-        }, error: (note) {
-          buf.writeln('''
-When processing ${entry.key} I encountered the following error:
-''');
-          appendNote(note);
-        });
-      }
-
-      buf.writeln('''
-
-See [my documentation](https://github.com/flutter-symbolizer-bot/flutter-symbolizer-bot/blob/main/README.md#commands) for more details.
-</details>
-''');
-    }
-
-    // Append information about symbolized comments to the bot's comment so that
-    // we could skip them later.
-    final successIds = <int>{
-      for (var comment in comments)
-        if (successes.containsKey(comment.url)) comment.id
-    };
-    buf.writeln('<!-- ${jsonEncode({'symbolized': successIds.toList()})} -->');
-
-    if (dryRun) {
-      print(buf);
-    } else {
-      await github.issues.createComment(repo, issue.number, buf.toString());
-    }
-  }
-
-  /// Mail failures to the [failuresEmail] mail address.
-  void _mailFailures(RepositorySlug repo, Issue issue, Set<_Comment> comments,
-      Map<int, SymbolizationResult> symbolized) async {
-    if (failuresEmail == null) {
-      return;
-    }
-
-    final failures = _getOnlyFailures(comments, symbolized);
-    if (failures.isEmpty) {
-      return;
-    }
-
-    final escape = const HtmlEscape().convert;
-
-    final buf = StringBuffer();
-    buf.write('''<p>Hello &#x1f44b;</p>
-<p>I was asked to symbolize crashes from <a href="${issue.htmlUrl}">issue ${issue.number}</a>, but failed.</p>
-''');
-    for (var entry in failures.entries) {
-      entry.value.when(ok: (results) {
-        for (var result in results) {
-          buf.writeln('''
-<p>When processing <a href="${entry.key}">comment</a>, I found crash</p>
-<pre>${escape(result.crash.toString())}</pre>
-<p>but failed with the following notes:</p>
-''');
-          for (var note in result.notes) {
-            buf.writeln(
-                '${noteMessage[note.kind]} <pre>${escape(note.message ?? '')}');
-          }
-        }
-      }, error: (note) {
-        buf.writeln('''
-<p>When processing <a href="${entry.key}">comment</a>, I failed with the following error:</p>
-''');
-        buf.writeln(
-            '${noteMessage[note.kind]} <pre>${escape(note.message ?? '')}');
-      });
-    }
-
-    if (dryRun) {
-      print(buf);
-    } else {
-      await mailer!.send(
-        Email(
-          [
-            Personalization([Address(failuresEmail!)])
-          ],
-          Address('noreply@dart.dev'),
-          'symbolization errors for issue #${issue.number}',
-          content: [Content('text/html', buf.toString())],
-        ),
-      );
-    }
-  }
-
-  static final _botInfoPattern = RegExp(r'<!-- (?<json>.*) -->');
-  static final _commentLinkPattern = RegExp(
-      r'^https://github\.com/(?<fullName>[\-\w]+/[\-\w]+)/issues/(?<issueNumber>\d+)#(?<ref>issue(comment)?-\d+)$');
-  static final _engineHashPattern = RegExp(r'^engine#(?<sha>[a-f0-9]+)$');
-  static final _flutterHashOrVersionPattern =
-      RegExp(r'^flutter#v?(?<version>[a-f0-9\.]+)$');
-}
-
-extension on BotCommand {
-  /// [true] if the user requested to process all comments on the issue.
-  bool get shouldProcessAll => !symbolizeThis && worklist.isEmpty;
-}
-
-/// Class that represents a comment on the issue.
-///
-/// GitHub API does not treat issue body itself as a comment hence
-/// the need for separate wrapper.
-class _Comment {
-  final int id;
-  final String url;
-  final String body;
-
-  _Comment(this.id, this.url, this.body);
-
-  _Comment.fromComment(IssueComment comment)
-      : this(comment.id!, comment.htmlUrl!, comment.body!);
-
-  _Comment.fromIssue(Issue issue)
-      : this(issue.id, issue.commentLikeHtmlUrl, issue.body);
-
-  @override
-  bool operator ==(Object other) {
-    return other is _Comment && other.id == id;
-  }
-
-  @override
-  int get hashCode => id.hashCode;
-}
-
-extension on Issue {
-  String get commentLikeHtmlUrl => '$htmlUrl#issue-$id';
-}
-
-/// Filter multimap of symbolization results to get all successes.
-Map<String, SymbolizationResultOk> _getOnlySuccesses(
-    Set<_Comment> comments, Map<int, SymbolizationResult> results) {
-  return Map.fromEntries(comments
-      .map((comment) => MapEntry(comment.url, results[comment.id]!))
-      .where((e) => e.value is SymbolizationResultOk)
-      .map((e) => MapEntry(
-          e.key,
-          _applyFilter(
-              e.value as SymbolizationResultOk, (r) => r.symbolized != null)))
-      .where((e) => e.value.results.isNotEmpty));
-}
-
-/// Filter multimap of symbolization results to get all failures.
-Map<String, SymbolizationResult> _getOnlyFailures(
-    Set<_Comment> comments, Map<int, SymbolizationResult> results) {
-  return Map.fromEntries(comments
-      .map((comment) => MapEntry(comment.url, results[comment.id]!))
-      .map((e) {
-    final result = e.value;
-    return MapEntry(
-        e.key,
-        result is SymbolizationResultOk
-            ? _applyFilter(result, (r) => r.symbolized == null)
-            : result);
-  }).where((e) =>
-          e.value is SymbolizationResultError ||
-          (e.value as SymbolizationResultOk).results.isNotEmpty));
-}
-
-SymbolizationResultOk _applyFilter(SymbolizationResultOk result,
-    bool Function(CrashSymbolizationResult) predicate) {
-  return SymbolizationResultOk(
-      results: result.results.where(predicate).toList());
-}
-
-extension on String {
-  String indentBy(String indent) => indent + split('\n').join('\n$indent');
-}
-
-extension on Set<_Comment> {
-  Iterable<int> get ids => map((e) => e.id);
-}
diff --git a/github-label-notifier/symbolizer/lib/model.dart b/github-label-notifier/symbolizer/lib/model.dart
index afe9b69..7ab92bd 100644
--- a/github-label-notifier/symbolizer/lib/model.dart
+++ b/github-label-notifier/symbolizer/lib/model.dart
@@ -237,14 +237,80 @@
     String? format,
     String? os,
   }) = _SymbolizationOverrides;
+
+  /// Parse the given [overrides].
+  ///
+  /// See README.md for overrides documentation.
+  static SymbolizationOverrides? tryParse(String overrides) {
+    String? engineHash;
+    String? flutterVersion;
+    String? os;
+    String? arch;
+    String? mode;
+    String? format;
+    var force = false;
+
+    // Command is just a sequence of keywords which specify which comments
+    // to symbolize and which symbols to use.
+    for (var keyword in overrides.split(' ')) {
+      switch (keyword) {
+        case 'x86':
+        case 'arm':
+        case 'arm64':
+        case 'x64':
+          arch = keyword;
+          break;
+        case 'debug':
+        case 'profile':
+        case 'release':
+          mode = keyword;
+          break;
+        case 'internal':
+          format = 'internal';
+          break;
+        case 'force':
+          force = true;
+          break;
+        case 'ios':
+          os = 'ios';
+          break;
+        default:
+          // Check if this keyword is an engine hash.
+          var m = _engineHashPattern.firstMatch(keyword);
+          if (m != null) {
+            engineHash = m.namedGroup('sha');
+            break;
+          }
+
+          m = _flutterHashOrVersionPattern.firstMatch(keyword);
+          if (m != null) {
+            flutterVersion = m.namedGroup('version');
+            break;
+          }
+          break;
+      }
+    }
+
+    return SymbolizationOverrides(
+      arch: arch,
+      engineHash: engineHash,
+      flutterVersion: flutterVersion,
+      mode: mode,
+      os: os,
+      force: force,
+      format: format,
+    );
+  }
+
+  static final _engineHashPattern = RegExp(r'^engine#(?<sha>[a-f0-9]+)$');
+  static final _flutterHashOrVersionPattern =
+      RegExp(r'^flutter#v?(?<version>[a-f0-9\.]+)$');
 }
 
 @freezed
 class ServerConfig with _$ServerConfig {
   factory ServerConfig({
     required String githubToken,
-    required String sendgridToken,
-    required String failureEmail,
   }) = _ServerConfig;
 
   factory ServerConfig.fromJson(Map<String, dynamic> json) =>
diff --git a/github-label-notifier/symbolizer/lib/model.freezed.dart b/github-label-notifier/symbolizer/lib/model.freezed.dart
index ac03a3d..8571294 100644
--- a/github-label-notifier/symbolizer/lib/model.freezed.dart
+++ b/github-label-notifier/symbolizer/lib/model.freezed.dart
@@ -1,9 +1,9 @@
 // coverage:ignore-file
 // GENERATED CODE - DO NOT MODIFY BY HAND
 // ignore_for_file: type=lint
-// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target
+// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 
-part of symbolizer.model;
+part of 'model.dart';
 
 // **************************************************************************
 // FreezedGenerator
@@ -12,7 +12,7 @@
 T _$identity<T>(T value) => value;
 
 final _privateConstructorUsedError = UnsupportedError(
-    'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods');
+    'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
 
 EngineVariant _$EngineVariantFromJson(Map<String, dynamic> json) {
   return _EngineVariant.fromJson(json);
@@ -34,79 +34,81 @@
 abstract class $EngineVariantCopyWith<$Res> {
   factory $EngineVariantCopyWith(
           EngineVariant value, $Res Function(EngineVariant) then) =
-      _$EngineVariantCopyWithImpl<$Res>;
+      _$EngineVariantCopyWithImpl<$Res, EngineVariant>;
+  @useResult
   $Res call({String os, String? arch, String? mode});
 }
 
 /// @nodoc
-class _$EngineVariantCopyWithImpl<$Res>
+class _$EngineVariantCopyWithImpl<$Res, $Val extends EngineVariant>
     implements $EngineVariantCopyWith<$Res> {
   _$EngineVariantCopyWithImpl(this._value, this._then);
 
-  final EngineVariant _value;
   // ignore: unused_field
-  final $Res Function(EngineVariant) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? os = freezed,
+    Object? os = null,
     Object? arch = freezed,
     Object? mode = freezed,
   }) {
     return _then(_value.copyWith(
-      os: os == freezed
+      os: null == os
           ? _value.os
           : os // ignore: cast_nullable_to_non_nullable
               as String,
-      arch: arch == freezed
+      arch: freezed == arch
           ? _value.arch
           : arch // ignore: cast_nullable_to_non_nullable
               as String?,
-      mode: mode == freezed
+      mode: freezed == mode
           ? _value.mode
           : mode // ignore: cast_nullable_to_non_nullable
               as String?,
-    ));
+    ) as $Val);
   }
 }
 
 /// @nodoc
-abstract class _$$_EngineVariantCopyWith<$Res>
+abstract class _$$EngineVariantImplCopyWith<$Res>
     implements $EngineVariantCopyWith<$Res> {
-  factory _$$_EngineVariantCopyWith(
-          _$_EngineVariant value, $Res Function(_$_EngineVariant) then) =
-      __$$_EngineVariantCopyWithImpl<$Res>;
+  factory _$$EngineVariantImplCopyWith(
+          _$EngineVariantImpl value, $Res Function(_$EngineVariantImpl) then) =
+      __$$EngineVariantImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call({String os, String? arch, String? mode});
 }
 
 /// @nodoc
-class __$$_EngineVariantCopyWithImpl<$Res>
-    extends _$EngineVariantCopyWithImpl<$Res>
-    implements _$$_EngineVariantCopyWith<$Res> {
-  __$$_EngineVariantCopyWithImpl(
-      _$_EngineVariant _value, $Res Function(_$_EngineVariant) _then)
-      : super(_value, (v) => _then(v as _$_EngineVariant));
+class __$$EngineVariantImplCopyWithImpl<$Res>
+    extends _$EngineVariantCopyWithImpl<$Res, _$EngineVariantImpl>
+    implements _$$EngineVariantImplCopyWith<$Res> {
+  __$$EngineVariantImplCopyWithImpl(
+      _$EngineVariantImpl _value, $Res Function(_$EngineVariantImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_EngineVariant get _value => super._value as _$_EngineVariant;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? os = freezed,
+    Object? os = null,
     Object? arch = freezed,
     Object? mode = freezed,
   }) {
-    return _then(_$_EngineVariant(
-      os: os == freezed
+    return _then(_$EngineVariantImpl(
+      os: null == os
           ? _value.os
           : os // ignore: cast_nullable_to_non_nullable
               as String,
-      arch: arch == freezed
+      arch: freezed == arch
           ? _value.arch
           : arch // ignore: cast_nullable_to_non_nullable
               as String?,
-      mode: mode == freezed
+      mode: freezed == mode
           ? _value.mode
           : mode // ignore: cast_nullable_to_non_nullable
               as String?,
@@ -116,11 +118,12 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$_EngineVariant implements _EngineVariant {
-  _$_EngineVariant({required this.os, required this.arch, required this.mode});
+class _$EngineVariantImpl implements _EngineVariant {
+  _$EngineVariantImpl(
+      {required this.os, required this.arch, required this.mode});
 
-  factory _$_EngineVariant.fromJson(Map<String, dynamic> json) =>
-      _$$_EngineVariantFromJson(json);
+  factory _$EngineVariantImpl.fromJson(Map<String, dynamic> json) =>
+      _$$EngineVariantImplFromJson(json);
 
   @override
   final String os;
@@ -135,31 +138,28 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_EngineVariant &&
-            const DeepCollectionEquality().equals(other.os, os) &&
-            const DeepCollectionEquality().equals(other.arch, arch) &&
-            const DeepCollectionEquality().equals(other.mode, mode));
+            other is _$EngineVariantImpl &&
+            (identical(other.os, os) || other.os == os) &&
+            (identical(other.arch, arch) || other.arch == arch) &&
+            (identical(other.mode, mode) || other.mode == mode));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(os),
-      const DeepCollectionEquality().hash(arch),
-      const DeepCollectionEquality().hash(mode));
+  int get hashCode => Object.hash(runtimeType, os, arch, mode);
 
   @JsonKey(ignore: true)
   @override
-  _$$_EngineVariantCopyWith<_$_EngineVariant> get copyWith =>
-      __$$_EngineVariantCopyWithImpl<_$_EngineVariant>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$EngineVariantImplCopyWith<_$EngineVariantImpl> get copyWith =>
+      __$$EngineVariantImplCopyWithImpl<_$EngineVariantImpl>(this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_EngineVariantToJson(
+    return _$$EngineVariantImplToJson(
       this,
     );
   }
@@ -169,10 +169,10 @@
   factory _EngineVariant(
       {required final String os,
       required final String? arch,
-      required final String? mode}) = _$_EngineVariant;
+      required final String? mode}) = _$EngineVariantImpl;
 
   factory _EngineVariant.fromJson(Map<String, dynamic> json) =
-      _$_EngineVariant.fromJson;
+      _$EngineVariantImpl.fromJson;
 
   @override
   String get os;
@@ -182,7 +182,7 @@
   String? get mode;
   @override
   @JsonKey(ignore: true)
-  _$$_EngineVariantCopyWith<_$_EngineVariant> get copyWith =>
+  _$$EngineVariantImplCopyWith<_$EngineVariantImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -205,52 +205,58 @@
 abstract class $EngineBuildCopyWith<$Res> {
   factory $EngineBuildCopyWith(
           EngineBuild value, $Res Function(EngineBuild) then) =
-      _$EngineBuildCopyWithImpl<$Res>;
+      _$EngineBuildCopyWithImpl<$Res, EngineBuild>;
+  @useResult
   $Res call({String engineHash, EngineVariant variant});
 
   $EngineVariantCopyWith<$Res> get variant;
 }
 
 /// @nodoc
-class _$EngineBuildCopyWithImpl<$Res> implements $EngineBuildCopyWith<$Res> {
+class _$EngineBuildCopyWithImpl<$Res, $Val extends EngineBuild>
+    implements $EngineBuildCopyWith<$Res> {
   _$EngineBuildCopyWithImpl(this._value, this._then);
 
-  final EngineBuild _value;
   // ignore: unused_field
-  final $Res Function(EngineBuild) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? engineHash = freezed,
-    Object? variant = freezed,
+    Object? engineHash = null,
+    Object? variant = null,
   }) {
     return _then(_value.copyWith(
-      engineHash: engineHash == freezed
+      engineHash: null == engineHash
           ? _value.engineHash
           : engineHash // ignore: cast_nullable_to_non_nullable
               as String,
-      variant: variant == freezed
+      variant: null == variant
           ? _value.variant
           : variant // ignore: cast_nullable_to_non_nullable
               as EngineVariant,
-    ));
+    ) as $Val);
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $EngineVariantCopyWith<$Res> get variant {
     return $EngineVariantCopyWith<$Res>(_value.variant, (value) {
-      return _then(_value.copyWith(variant: value));
+      return _then(_value.copyWith(variant: value) as $Val);
     });
   }
 }
 
 /// @nodoc
-abstract class _$$_EngineBuildCopyWith<$Res>
+abstract class _$$EngineBuildImplCopyWith<$Res>
     implements $EngineBuildCopyWith<$Res> {
-  factory _$$_EngineBuildCopyWith(
-          _$_EngineBuild value, $Res Function(_$_EngineBuild) then) =
-      __$$_EngineBuildCopyWithImpl<$Res>;
+  factory _$$EngineBuildImplCopyWith(
+          _$EngineBuildImpl value, $Res Function(_$EngineBuildImpl) then) =
+      __$$EngineBuildImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call({String engineHash, EngineVariant variant});
 
   @override
@@ -258,26 +264,25 @@
 }
 
 /// @nodoc
-class __$$_EngineBuildCopyWithImpl<$Res> extends _$EngineBuildCopyWithImpl<$Res>
-    implements _$$_EngineBuildCopyWith<$Res> {
-  __$$_EngineBuildCopyWithImpl(
-      _$_EngineBuild _value, $Res Function(_$_EngineBuild) _then)
-      : super(_value, (v) => _then(v as _$_EngineBuild));
+class __$$EngineBuildImplCopyWithImpl<$Res>
+    extends _$EngineBuildCopyWithImpl<$Res, _$EngineBuildImpl>
+    implements _$$EngineBuildImplCopyWith<$Res> {
+  __$$EngineBuildImplCopyWithImpl(
+      _$EngineBuildImpl _value, $Res Function(_$EngineBuildImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_EngineBuild get _value => super._value as _$_EngineBuild;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? engineHash = freezed,
-    Object? variant = freezed,
+    Object? engineHash = null,
+    Object? variant = null,
   }) {
-    return _then(_$_EngineBuild(
-      engineHash: engineHash == freezed
+    return _then(_$EngineBuildImpl(
+      engineHash: null == engineHash
           ? _value.engineHash
           : engineHash // ignore: cast_nullable_to_non_nullable
               as String,
-      variant: variant == freezed
+      variant: null == variant
           ? _value.variant
           : variant // ignore: cast_nullable_to_non_nullable
               as EngineVariant,
@@ -287,11 +292,11 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$_EngineBuild implements _EngineBuild {
-  _$_EngineBuild({required this.engineHash, required this.variant});
+class _$EngineBuildImpl implements _EngineBuild {
+  _$EngineBuildImpl({required this.engineHash, required this.variant});
 
-  factory _$_EngineBuild.fromJson(Map<String, dynamic> json) =>
-      _$$_EngineBuildFromJson(json);
+  factory _$EngineBuildImpl.fromJson(Map<String, dynamic> json) =>
+      _$$EngineBuildImplFromJson(json);
 
   @override
   final String engineHash;
@@ -304,30 +309,28 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_EngineBuild &&
-            const DeepCollectionEquality()
-                .equals(other.engineHash, engineHash) &&
-            const DeepCollectionEquality().equals(other.variant, variant));
+            other is _$EngineBuildImpl &&
+            (identical(other.engineHash, engineHash) ||
+                other.engineHash == engineHash) &&
+            (identical(other.variant, variant) || other.variant == variant));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(engineHash),
-      const DeepCollectionEquality().hash(variant));
+  int get hashCode => Object.hash(runtimeType, engineHash, variant);
 
   @JsonKey(ignore: true)
   @override
-  _$$_EngineBuildCopyWith<_$_EngineBuild> get copyWith =>
-      __$$_EngineBuildCopyWithImpl<_$_EngineBuild>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$EngineBuildImplCopyWith<_$EngineBuildImpl> get copyWith =>
+      __$$EngineBuildImplCopyWithImpl<_$EngineBuildImpl>(this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_EngineBuildToJson(
+    return _$$EngineBuildImplToJson(
       this,
     );
   }
@@ -336,10 +339,10 @@
 abstract class _EngineBuild implements EngineBuild {
   factory _EngineBuild(
       {required final String engineHash,
-      required final EngineVariant variant}) = _$_EngineBuild;
+      required final EngineVariant variant}) = _$EngineBuildImpl;
 
   factory _EngineBuild.fromJson(Map<String, dynamic> json) =
-      _$_EngineBuild.fromJson;
+      _$EngineBuildImpl.fromJson;
 
   @override
   String get engineHash;
@@ -347,7 +350,7 @@
   EngineVariant get variant;
   @override
   @JsonKey(ignore: true)
-  _$$_EngineBuildCopyWith<_$_EngineBuild> get copyWith =>
+  _$$EngineBuildImplCopyWith<_$EngineBuildImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -390,16 +393,16 @@
       throw _privateConstructorUsedError;
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(String no, String binary, int pc, String symbol,
+    TResult? Function(String no, String binary, int pc, String symbol,
             int? offset, String location)?
         ios,
-    TResult Function(
+    TResult? Function(
             String no, int pc, String binary, String rest, String? buildId)?
         android,
-    TResult Function(String no, int pc, String binary, int? offset,
+    TResult? Function(String no, int pc, String binary, int? offset,
             String? location, String? symbol)?
         custom,
-    TResult Function(int pc, String binary, int offset)? dartvm,
+    TResult? Function(int pc, String binary, int offset)? dartvm,
   }) =>
       throw _privateConstructorUsedError;
   @optionalTypeArgs
@@ -427,10 +430,10 @@
       throw _privateConstructorUsedError;
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(IosCrashFrame value)? ios,
-    TResult Function(AndroidCrashFrame value)? android,
-    TResult Function(CustomCrashFrame value)? custom,
-    TResult Function(DartvmCrashFrame value)? dartvm,
+    TResult? Function(IosCrashFrame value)? ios,
+    TResult? Function(AndroidCrashFrame value)? android,
+    TResult? Function(CustomCrashFrame value)? custom,
+    TResult? Function(DartvmCrashFrame value)? dartvm,
   }) =>
       throw _privateConstructorUsedError;
   @optionalTypeArgs
@@ -452,43 +455,48 @@
 abstract class $CrashFrameCopyWith<$Res> {
   factory $CrashFrameCopyWith(
           CrashFrame value, $Res Function(CrashFrame) then) =
-      _$CrashFrameCopyWithImpl<$Res>;
+      _$CrashFrameCopyWithImpl<$Res, CrashFrame>;
+  @useResult
   $Res call({String binary, int pc});
 }
 
 /// @nodoc
-class _$CrashFrameCopyWithImpl<$Res> implements $CrashFrameCopyWith<$Res> {
+class _$CrashFrameCopyWithImpl<$Res, $Val extends CrashFrame>
+    implements $CrashFrameCopyWith<$Res> {
   _$CrashFrameCopyWithImpl(this._value, this._then);
 
-  final CrashFrame _value;
   // ignore: unused_field
-  final $Res Function(CrashFrame) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? binary = freezed,
-    Object? pc = freezed,
+    Object? binary = null,
+    Object? pc = null,
   }) {
     return _then(_value.copyWith(
-      binary: binary == freezed
+      binary: null == binary
           ? _value.binary
           : binary // ignore: cast_nullable_to_non_nullable
               as String,
-      pc: pc == freezed
+      pc: null == pc
           ? _value.pc
           : pc // ignore: cast_nullable_to_non_nullable
               as int,
-    ));
+    ) as $Val);
   }
 }
 
 /// @nodoc
-abstract class _$$IosCrashFrameCopyWith<$Res>
+abstract class _$$IosCrashFrameImplCopyWith<$Res>
     implements $CrashFrameCopyWith<$Res> {
-  factory _$$IosCrashFrameCopyWith(
-          _$IosCrashFrame value, $Res Function(_$IosCrashFrame) then) =
-      __$$IosCrashFrameCopyWithImpl<$Res>;
+  factory _$$IosCrashFrameImplCopyWith(
+          _$IosCrashFrameImpl value, $Res Function(_$IosCrashFrameImpl) then) =
+      __$$IosCrashFrameImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {String no,
       String binary,
@@ -499,46 +507,45 @@
 }
 
 /// @nodoc
-class __$$IosCrashFrameCopyWithImpl<$Res> extends _$CrashFrameCopyWithImpl<$Res>
-    implements _$$IosCrashFrameCopyWith<$Res> {
-  __$$IosCrashFrameCopyWithImpl(
-      _$IosCrashFrame _value, $Res Function(_$IosCrashFrame) _then)
-      : super(_value, (v) => _then(v as _$IosCrashFrame));
+class __$$IosCrashFrameImplCopyWithImpl<$Res>
+    extends _$CrashFrameCopyWithImpl<$Res, _$IosCrashFrameImpl>
+    implements _$$IosCrashFrameImplCopyWith<$Res> {
+  __$$IosCrashFrameImplCopyWithImpl(
+      _$IosCrashFrameImpl _value, $Res Function(_$IosCrashFrameImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$IosCrashFrame get _value => super._value as _$IosCrashFrame;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? no = freezed,
-    Object? binary = freezed,
-    Object? pc = freezed,
-    Object? symbol = freezed,
+    Object? no = null,
+    Object? binary = null,
+    Object? pc = null,
+    Object? symbol = null,
     Object? offset = freezed,
-    Object? location = freezed,
+    Object? location = null,
   }) {
-    return _then(_$IosCrashFrame(
-      no: no == freezed
+    return _then(_$IosCrashFrameImpl(
+      no: null == no
           ? _value.no
           : no // ignore: cast_nullable_to_non_nullable
               as String,
-      binary: binary == freezed
+      binary: null == binary
           ? _value.binary
           : binary // ignore: cast_nullable_to_non_nullable
               as String,
-      pc: pc == freezed
+      pc: null == pc
           ? _value.pc
           : pc // ignore: cast_nullable_to_non_nullable
               as int,
-      symbol: symbol == freezed
+      symbol: null == symbol
           ? _value.symbol
           : symbol // ignore: cast_nullable_to_non_nullable
               as String,
-      offset: offset == freezed
+      offset: freezed == offset
           ? _value.offset
           : offset // ignore: cast_nullable_to_non_nullable
               as int?,
-      location: location == freezed
+      location: null == location
           ? _value.location
           : location // ignore: cast_nullable_to_non_nullable
               as String,
@@ -548,8 +555,8 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$IosCrashFrame implements IosCrashFrame {
-  _$IosCrashFrame(
+class _$IosCrashFrameImpl implements IosCrashFrame {
+  _$IosCrashFrameImpl(
       {required this.no,
       required this.binary,
       required this.pc,
@@ -559,8 +566,8 @@
       final String? $type})
       : $type = $type ?? 'ios';
 
-  factory _$IosCrashFrame.fromJson(Map<String, dynamic> json) =>
-      _$$IosCrashFrameFromJson(json);
+  factory _$IosCrashFrameImpl.fromJson(Map<String, dynamic> json) =>
+      _$$IosCrashFrameImplFromJson(json);
 
   @override
   final String no;
@@ -586,33 +593,29 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$IosCrashFrame &&
-            const DeepCollectionEquality().equals(other.no, no) &&
-            const DeepCollectionEquality().equals(other.binary, binary) &&
-            const DeepCollectionEquality().equals(other.pc, pc) &&
-            const DeepCollectionEquality().equals(other.symbol, symbol) &&
-            const DeepCollectionEquality().equals(other.offset, offset) &&
-            const DeepCollectionEquality().equals(other.location, location));
+            other is _$IosCrashFrameImpl &&
+            (identical(other.no, no) || other.no == no) &&
+            (identical(other.binary, binary) || other.binary == binary) &&
+            (identical(other.pc, pc) || other.pc == pc) &&
+            (identical(other.symbol, symbol) || other.symbol == symbol) &&
+            (identical(other.offset, offset) || other.offset == offset) &&
+            (identical(other.location, location) ||
+                other.location == location));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(no),
-      const DeepCollectionEquality().hash(binary),
-      const DeepCollectionEquality().hash(pc),
-      const DeepCollectionEquality().hash(symbol),
-      const DeepCollectionEquality().hash(offset),
-      const DeepCollectionEquality().hash(location));
+  int get hashCode =>
+      Object.hash(runtimeType, no, binary, pc, symbol, offset, location);
 
   @JsonKey(ignore: true)
   @override
-  _$$IosCrashFrameCopyWith<_$IosCrashFrame> get copyWith =>
-      __$$IosCrashFrameCopyWithImpl<_$IosCrashFrame>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$IosCrashFrameImplCopyWith<_$IosCrashFrameImpl> get copyWith =>
+      __$$IosCrashFrameImplCopyWithImpl<_$IosCrashFrameImpl>(this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -634,16 +637,16 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(String no, String binary, int pc, String symbol,
+    TResult? Function(String no, String binary, int pc, String symbol,
             int? offset, String location)?
         ios,
-    TResult Function(
+    TResult? Function(
             String no, int pc, String binary, String rest, String? buildId)?
         android,
-    TResult Function(String no, int pc, String binary, int? offset,
+    TResult? Function(String no, int pc, String binary, int? offset,
             String? location, String? symbol)?
         custom,
-    TResult Function(int pc, String binary, int offset)? dartvm,
+    TResult? Function(int pc, String binary, int offset)? dartvm,
   }) {
     return ios?.call(no, binary, pc, symbol, offset, location);
   }
@@ -683,10 +686,10 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(IosCrashFrame value)? ios,
-    TResult Function(AndroidCrashFrame value)? android,
-    TResult Function(CustomCrashFrame value)? custom,
-    TResult Function(DartvmCrashFrame value)? dartvm,
+    TResult? Function(IosCrashFrame value)? ios,
+    TResult? Function(AndroidCrashFrame value)? android,
+    TResult? Function(CustomCrashFrame value)? custom,
+    TResult? Function(DartvmCrashFrame value)? dartvm,
   }) {
     return ios?.call(this);
   }
@@ -708,7 +711,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$IosCrashFrameToJson(
+    return _$$IosCrashFrameImplToJson(
       this,
     );
   }
@@ -721,10 +724,10 @@
       required final int pc,
       required final String symbol,
       required final int? offset,
-      required final String location}) = _$IosCrashFrame;
+      required final String location}) = _$IosCrashFrameImpl;
 
   factory IosCrashFrame.fromJson(Map<String, dynamic> json) =
-      _$IosCrashFrame.fromJson;
+      _$IosCrashFrameImpl.fromJson;
 
   String get no;
   @override
@@ -738,57 +741,56 @@
   String get location;
   @override
   @JsonKey(ignore: true)
-  _$$IosCrashFrameCopyWith<_$IosCrashFrame> get copyWith =>
+  _$$IosCrashFrameImplCopyWith<_$IosCrashFrameImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
 /// @nodoc
-abstract class _$$AndroidCrashFrameCopyWith<$Res>
+abstract class _$$AndroidCrashFrameImplCopyWith<$Res>
     implements $CrashFrameCopyWith<$Res> {
-  factory _$$AndroidCrashFrameCopyWith(
-          _$AndroidCrashFrame value, $Res Function(_$AndroidCrashFrame) then) =
-      __$$AndroidCrashFrameCopyWithImpl<$Res>;
+  factory _$$AndroidCrashFrameImplCopyWith(_$AndroidCrashFrameImpl value,
+          $Res Function(_$AndroidCrashFrameImpl) then) =
+      __$$AndroidCrashFrameImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call({String no, int pc, String binary, String rest, String? buildId});
 }
 
 /// @nodoc
-class __$$AndroidCrashFrameCopyWithImpl<$Res>
-    extends _$CrashFrameCopyWithImpl<$Res>
-    implements _$$AndroidCrashFrameCopyWith<$Res> {
-  __$$AndroidCrashFrameCopyWithImpl(
-      _$AndroidCrashFrame _value, $Res Function(_$AndroidCrashFrame) _then)
-      : super(_value, (v) => _then(v as _$AndroidCrashFrame));
+class __$$AndroidCrashFrameImplCopyWithImpl<$Res>
+    extends _$CrashFrameCopyWithImpl<$Res, _$AndroidCrashFrameImpl>
+    implements _$$AndroidCrashFrameImplCopyWith<$Res> {
+  __$$AndroidCrashFrameImplCopyWithImpl(_$AndroidCrashFrameImpl _value,
+      $Res Function(_$AndroidCrashFrameImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$AndroidCrashFrame get _value => super._value as _$AndroidCrashFrame;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? no = freezed,
-    Object? pc = freezed,
-    Object? binary = freezed,
-    Object? rest = freezed,
+    Object? no = null,
+    Object? pc = null,
+    Object? binary = null,
+    Object? rest = null,
     Object? buildId = freezed,
   }) {
-    return _then(_$AndroidCrashFrame(
-      no: no == freezed
+    return _then(_$AndroidCrashFrameImpl(
+      no: null == no
           ? _value.no
           : no // ignore: cast_nullable_to_non_nullable
               as String,
-      pc: pc == freezed
+      pc: null == pc
           ? _value.pc
           : pc // ignore: cast_nullable_to_non_nullable
               as int,
-      binary: binary == freezed
+      binary: null == binary
           ? _value.binary
           : binary // ignore: cast_nullable_to_non_nullable
               as String,
-      rest: rest == freezed
+      rest: null == rest
           ? _value.rest
           : rest // ignore: cast_nullable_to_non_nullable
               as String,
-      buildId: buildId == freezed
+      buildId: freezed == buildId
           ? _value.buildId
           : buildId // ignore: cast_nullable_to_non_nullable
               as String?,
@@ -798,8 +800,8 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$AndroidCrashFrame implements AndroidCrashFrame {
-  _$AndroidCrashFrame(
+class _$AndroidCrashFrameImpl implements AndroidCrashFrame {
+  _$AndroidCrashFrameImpl(
       {required this.no,
       required this.pc,
       required this.binary,
@@ -808,8 +810,8 @@
       final String? $type})
       : $type = $type ?? 'android';
 
-  factory _$AndroidCrashFrame.fromJson(Map<String, dynamic> json) =>
-      _$$AndroidCrashFrameFromJson(json);
+  factory _$AndroidCrashFrameImpl.fromJson(Map<String, dynamic> json) =>
+      _$$AndroidCrashFrameImplFromJson(json);
 
   @override
   final String no;
@@ -833,31 +835,27 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$AndroidCrashFrame &&
-            const DeepCollectionEquality().equals(other.no, no) &&
-            const DeepCollectionEquality().equals(other.pc, pc) &&
-            const DeepCollectionEquality().equals(other.binary, binary) &&
-            const DeepCollectionEquality().equals(other.rest, rest) &&
-            const DeepCollectionEquality().equals(other.buildId, buildId));
+            other is _$AndroidCrashFrameImpl &&
+            (identical(other.no, no) || other.no == no) &&
+            (identical(other.pc, pc) || other.pc == pc) &&
+            (identical(other.binary, binary) || other.binary == binary) &&
+            (identical(other.rest, rest) || other.rest == rest) &&
+            (identical(other.buildId, buildId) || other.buildId == buildId));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(no),
-      const DeepCollectionEquality().hash(pc),
-      const DeepCollectionEquality().hash(binary),
-      const DeepCollectionEquality().hash(rest),
-      const DeepCollectionEquality().hash(buildId));
+  int get hashCode => Object.hash(runtimeType, no, pc, binary, rest, buildId);
 
   @JsonKey(ignore: true)
   @override
-  _$$AndroidCrashFrameCopyWith<_$AndroidCrashFrame> get copyWith =>
-      __$$AndroidCrashFrameCopyWithImpl<_$AndroidCrashFrame>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$AndroidCrashFrameImplCopyWith<_$AndroidCrashFrameImpl> get copyWith =>
+      __$$AndroidCrashFrameImplCopyWithImpl<_$AndroidCrashFrameImpl>(
+          this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -879,16 +877,16 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(String no, String binary, int pc, String symbol,
+    TResult? Function(String no, String binary, int pc, String symbol,
             int? offset, String location)?
         ios,
-    TResult Function(
+    TResult? Function(
             String no, int pc, String binary, String rest, String? buildId)?
         android,
-    TResult Function(String no, int pc, String binary, int? offset,
+    TResult? Function(String no, int pc, String binary, int? offset,
             String? location, String? symbol)?
         custom,
-    TResult Function(int pc, String binary, int offset)? dartvm,
+    TResult? Function(int pc, String binary, int offset)? dartvm,
   }) {
     return android?.call(no, pc, binary, rest, buildId);
   }
@@ -928,10 +926,10 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(IosCrashFrame value)? ios,
-    TResult Function(AndroidCrashFrame value)? android,
-    TResult Function(CustomCrashFrame value)? custom,
-    TResult Function(DartvmCrashFrame value)? dartvm,
+    TResult? Function(IosCrashFrame value)? ios,
+    TResult? Function(AndroidCrashFrame value)? android,
+    TResult? Function(CustomCrashFrame value)? custom,
+    TResult? Function(DartvmCrashFrame value)? dartvm,
   }) {
     return android?.call(this);
   }
@@ -953,7 +951,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$AndroidCrashFrameToJson(
+    return _$$AndroidCrashFrameImplToJson(
       this,
     );
   }
@@ -965,10 +963,10 @@
       required final int pc,
       required final String binary,
       required final String rest,
-      required final String? buildId}) = _$AndroidCrashFrame;
+      required final String? buildId}) = _$AndroidCrashFrameImpl;
 
   factory AndroidCrashFrame.fromJson(Map<String, dynamic> json) =
-      _$AndroidCrashFrame.fromJson;
+      _$AndroidCrashFrameImpl.fromJson;
 
   String get no;
   @override
@@ -981,17 +979,18 @@
   String? get buildId;
   @override
   @JsonKey(ignore: true)
-  _$$AndroidCrashFrameCopyWith<_$AndroidCrashFrame> get copyWith =>
+  _$$AndroidCrashFrameImplCopyWith<_$AndroidCrashFrameImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
 /// @nodoc
-abstract class _$$CustomCrashFrameCopyWith<$Res>
+abstract class _$$CustomCrashFrameImplCopyWith<$Res>
     implements $CrashFrameCopyWith<$Res> {
-  factory _$$CustomCrashFrameCopyWith(
-          _$CustomCrashFrame value, $Res Function(_$CustomCrashFrame) then) =
-      __$$CustomCrashFrameCopyWithImpl<$Res>;
+  factory _$$CustomCrashFrameImplCopyWith(_$CustomCrashFrameImpl value,
+          $Res Function(_$CustomCrashFrameImpl) then) =
+      __$$CustomCrashFrameImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {String no,
       int pc,
@@ -1002,47 +1001,45 @@
 }
 
 /// @nodoc
-class __$$CustomCrashFrameCopyWithImpl<$Res>
-    extends _$CrashFrameCopyWithImpl<$Res>
-    implements _$$CustomCrashFrameCopyWith<$Res> {
-  __$$CustomCrashFrameCopyWithImpl(
-      _$CustomCrashFrame _value, $Res Function(_$CustomCrashFrame) _then)
-      : super(_value, (v) => _then(v as _$CustomCrashFrame));
+class __$$CustomCrashFrameImplCopyWithImpl<$Res>
+    extends _$CrashFrameCopyWithImpl<$Res, _$CustomCrashFrameImpl>
+    implements _$$CustomCrashFrameImplCopyWith<$Res> {
+  __$$CustomCrashFrameImplCopyWithImpl(_$CustomCrashFrameImpl _value,
+      $Res Function(_$CustomCrashFrameImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$CustomCrashFrame get _value => super._value as _$CustomCrashFrame;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? no = freezed,
-    Object? pc = freezed,
-    Object? binary = freezed,
+    Object? no = null,
+    Object? pc = null,
+    Object? binary = null,
     Object? offset = freezed,
     Object? location = freezed,
     Object? symbol = freezed,
   }) {
-    return _then(_$CustomCrashFrame(
-      no: no == freezed
+    return _then(_$CustomCrashFrameImpl(
+      no: null == no
           ? _value.no
           : no // ignore: cast_nullable_to_non_nullable
               as String,
-      pc: pc == freezed
+      pc: null == pc
           ? _value.pc
           : pc // ignore: cast_nullable_to_non_nullable
               as int,
-      binary: binary == freezed
+      binary: null == binary
           ? _value.binary
           : binary // ignore: cast_nullable_to_non_nullable
               as String,
-      offset: offset == freezed
+      offset: freezed == offset
           ? _value.offset
           : offset // ignore: cast_nullable_to_non_nullable
               as int?,
-      location: location == freezed
+      location: freezed == location
           ? _value.location
           : location // ignore: cast_nullable_to_non_nullable
               as String?,
-      symbol: symbol == freezed
+      symbol: freezed == symbol
           ? _value.symbol
           : symbol // ignore: cast_nullable_to_non_nullable
               as String?,
@@ -1052,8 +1049,8 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$CustomCrashFrame implements CustomCrashFrame {
-  _$CustomCrashFrame(
+class _$CustomCrashFrameImpl implements CustomCrashFrame {
+  _$CustomCrashFrameImpl(
       {required this.no,
       required this.pc,
       required this.binary,
@@ -1063,8 +1060,8 @@
       final String? $type})
       : $type = $type ?? 'custom';
 
-  factory _$CustomCrashFrame.fromJson(Map<String, dynamic> json) =>
-      _$$CustomCrashFrameFromJson(json);
+  factory _$CustomCrashFrameImpl.fromJson(Map<String, dynamic> json) =>
+      _$$CustomCrashFrameImplFromJson(json);
 
   @override
   final String no;
@@ -1088,33 +1085,30 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$CustomCrashFrame &&
-            const DeepCollectionEquality().equals(other.no, no) &&
-            const DeepCollectionEquality().equals(other.pc, pc) &&
-            const DeepCollectionEquality().equals(other.binary, binary) &&
-            const DeepCollectionEquality().equals(other.offset, offset) &&
-            const DeepCollectionEquality().equals(other.location, location) &&
-            const DeepCollectionEquality().equals(other.symbol, symbol));
+            other is _$CustomCrashFrameImpl &&
+            (identical(other.no, no) || other.no == no) &&
+            (identical(other.pc, pc) || other.pc == pc) &&
+            (identical(other.binary, binary) || other.binary == binary) &&
+            (identical(other.offset, offset) || other.offset == offset) &&
+            (identical(other.location, location) ||
+                other.location == location) &&
+            (identical(other.symbol, symbol) || other.symbol == symbol));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(no),
-      const DeepCollectionEquality().hash(pc),
-      const DeepCollectionEquality().hash(binary),
-      const DeepCollectionEquality().hash(offset),
-      const DeepCollectionEquality().hash(location),
-      const DeepCollectionEquality().hash(symbol));
+  int get hashCode =>
+      Object.hash(runtimeType, no, pc, binary, offset, location, symbol);
 
   @JsonKey(ignore: true)
   @override
-  _$$CustomCrashFrameCopyWith<_$CustomCrashFrame> get copyWith =>
-      __$$CustomCrashFrameCopyWithImpl<_$CustomCrashFrame>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$CustomCrashFrameImplCopyWith<_$CustomCrashFrameImpl> get copyWith =>
+      __$$CustomCrashFrameImplCopyWithImpl<_$CustomCrashFrameImpl>(
+          this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -1136,16 +1130,16 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(String no, String binary, int pc, String symbol,
+    TResult? Function(String no, String binary, int pc, String symbol,
             int? offset, String location)?
         ios,
-    TResult Function(
+    TResult? Function(
             String no, int pc, String binary, String rest, String? buildId)?
         android,
-    TResult Function(String no, int pc, String binary, int? offset,
+    TResult? Function(String no, int pc, String binary, int? offset,
             String? location, String? symbol)?
         custom,
-    TResult Function(int pc, String binary, int offset)? dartvm,
+    TResult? Function(int pc, String binary, int offset)? dartvm,
   }) {
     return custom?.call(no, pc, binary, offset, location, symbol);
   }
@@ -1185,10 +1179,10 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(IosCrashFrame value)? ios,
-    TResult Function(AndroidCrashFrame value)? android,
-    TResult Function(CustomCrashFrame value)? custom,
-    TResult Function(DartvmCrashFrame value)? dartvm,
+    TResult? Function(IosCrashFrame value)? ios,
+    TResult? Function(AndroidCrashFrame value)? android,
+    TResult? Function(CustomCrashFrame value)? custom,
+    TResult? Function(DartvmCrashFrame value)? dartvm,
   }) {
     return custom?.call(this);
   }
@@ -1210,7 +1204,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$CustomCrashFrameToJson(
+    return _$$CustomCrashFrameImplToJson(
       this,
     );
   }
@@ -1223,10 +1217,10 @@
       required final String binary,
       required final int? offset,
       required final String? location,
-      required final String? symbol}) = _$CustomCrashFrame;
+      required final String? symbol}) = _$CustomCrashFrameImpl;
 
   factory CustomCrashFrame.fromJson(Map<String, dynamic> json) =
-      _$CustomCrashFrame.fromJson;
+      _$CustomCrashFrameImpl.fromJson;
 
   String get no;
   @override
@@ -1238,47 +1232,46 @@
   String? get symbol;
   @override
   @JsonKey(ignore: true)
-  _$$CustomCrashFrameCopyWith<_$CustomCrashFrame> get copyWith =>
+  _$$CustomCrashFrameImplCopyWith<_$CustomCrashFrameImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
 /// @nodoc
-abstract class _$$DartvmCrashFrameCopyWith<$Res>
+abstract class _$$DartvmCrashFrameImplCopyWith<$Res>
     implements $CrashFrameCopyWith<$Res> {
-  factory _$$DartvmCrashFrameCopyWith(
-          _$DartvmCrashFrame value, $Res Function(_$DartvmCrashFrame) then) =
-      __$$DartvmCrashFrameCopyWithImpl<$Res>;
+  factory _$$DartvmCrashFrameImplCopyWith(_$DartvmCrashFrameImpl value,
+          $Res Function(_$DartvmCrashFrameImpl) then) =
+      __$$DartvmCrashFrameImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call({int pc, String binary, int offset});
 }
 
 /// @nodoc
-class __$$DartvmCrashFrameCopyWithImpl<$Res>
-    extends _$CrashFrameCopyWithImpl<$Res>
-    implements _$$DartvmCrashFrameCopyWith<$Res> {
-  __$$DartvmCrashFrameCopyWithImpl(
-      _$DartvmCrashFrame _value, $Res Function(_$DartvmCrashFrame) _then)
-      : super(_value, (v) => _then(v as _$DartvmCrashFrame));
+class __$$DartvmCrashFrameImplCopyWithImpl<$Res>
+    extends _$CrashFrameCopyWithImpl<$Res, _$DartvmCrashFrameImpl>
+    implements _$$DartvmCrashFrameImplCopyWith<$Res> {
+  __$$DartvmCrashFrameImplCopyWithImpl(_$DartvmCrashFrameImpl _value,
+      $Res Function(_$DartvmCrashFrameImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$DartvmCrashFrame get _value => super._value as _$DartvmCrashFrame;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? pc = freezed,
-    Object? binary = freezed,
-    Object? offset = freezed,
+    Object? pc = null,
+    Object? binary = null,
+    Object? offset = null,
   }) {
-    return _then(_$DartvmCrashFrame(
-      pc: pc == freezed
+    return _then(_$DartvmCrashFrameImpl(
+      pc: null == pc
           ? _value.pc
           : pc // ignore: cast_nullable_to_non_nullable
               as int,
-      binary: binary == freezed
+      binary: null == binary
           ? _value.binary
           : binary // ignore: cast_nullable_to_non_nullable
               as String,
-      offset: offset == freezed
+      offset: null == offset
           ? _value.offset
           : offset // ignore: cast_nullable_to_non_nullable
               as int,
@@ -1288,16 +1281,16 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$DartvmCrashFrame implements DartvmCrashFrame {
-  _$DartvmCrashFrame(
+class _$DartvmCrashFrameImpl implements DartvmCrashFrame {
+  _$DartvmCrashFrameImpl(
       {required this.pc,
       required this.binary,
       required this.offset,
       final String? $type})
       : $type = $type ?? 'dartvm';
 
-  factory _$DartvmCrashFrame.fromJson(Map<String, dynamic> json) =>
-      _$$DartvmCrashFrameFromJson(json);
+  factory _$DartvmCrashFrameImpl.fromJson(Map<String, dynamic> json) =>
+      _$$DartvmCrashFrameImplFromJson(json);
 
   /// Absolute PC of the frame.
   @override
@@ -1320,27 +1313,25 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$DartvmCrashFrame &&
-            const DeepCollectionEquality().equals(other.pc, pc) &&
-            const DeepCollectionEquality().equals(other.binary, binary) &&
-            const DeepCollectionEquality().equals(other.offset, offset));
+            other is _$DartvmCrashFrameImpl &&
+            (identical(other.pc, pc) || other.pc == pc) &&
+            (identical(other.binary, binary) || other.binary == binary) &&
+            (identical(other.offset, offset) || other.offset == offset));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(pc),
-      const DeepCollectionEquality().hash(binary),
-      const DeepCollectionEquality().hash(offset));
+  int get hashCode => Object.hash(runtimeType, pc, binary, offset);
 
   @JsonKey(ignore: true)
   @override
-  _$$DartvmCrashFrameCopyWith<_$DartvmCrashFrame> get copyWith =>
-      __$$DartvmCrashFrameCopyWithImpl<_$DartvmCrashFrame>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$DartvmCrashFrameImplCopyWith<_$DartvmCrashFrameImpl> get copyWith =>
+      __$$DartvmCrashFrameImplCopyWithImpl<_$DartvmCrashFrameImpl>(
+          this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -1362,16 +1353,16 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(String no, String binary, int pc, String symbol,
+    TResult? Function(String no, String binary, int pc, String symbol,
             int? offset, String location)?
         ios,
-    TResult Function(
+    TResult? Function(
             String no, int pc, String binary, String rest, String? buildId)?
         android,
-    TResult Function(String no, int pc, String binary, int? offset,
+    TResult? Function(String no, int pc, String binary, int? offset,
             String? location, String? symbol)?
         custom,
-    TResult Function(int pc, String binary, int offset)? dartvm,
+    TResult? Function(int pc, String binary, int offset)? dartvm,
   }) {
     return dartvm?.call(pc, binary, offset);
   }
@@ -1411,10 +1402,10 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(IosCrashFrame value)? ios,
-    TResult Function(AndroidCrashFrame value)? android,
-    TResult Function(CustomCrashFrame value)? custom,
-    TResult Function(DartvmCrashFrame value)? dartvm,
+    TResult? Function(IosCrashFrame value)? ios,
+    TResult? Function(AndroidCrashFrame value)? android,
+    TResult? Function(CustomCrashFrame value)? custom,
+    TResult? Function(DartvmCrashFrame value)? dartvm,
   }) {
     return dartvm?.call(this);
   }
@@ -1436,7 +1427,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$DartvmCrashFrameToJson(
+    return _$$DartvmCrashFrameImplToJson(
       this,
     );
   }
@@ -1446,10 +1437,10 @@
   factory DartvmCrashFrame(
       {required final int pc,
       required final String binary,
-      required final int offset}) = _$DartvmCrashFrame;
+      required final int offset}) = _$DartvmCrashFrameImpl;
 
   factory DartvmCrashFrame.fromJson(Map<String, dynamic> json) =
-      _$DartvmCrashFrame.fromJson;
+      _$DartvmCrashFrameImpl.fromJson;
 
   @override
 
@@ -1464,7 +1455,7 @@
   int get offset;
   @override
   @JsonKey(ignore: true)
-  _$$DartvmCrashFrameCopyWith<_$DartvmCrashFrame> get copyWith =>
+  _$$DartvmCrashFrameImplCopyWith<_$DartvmCrashFrameImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -1487,7 +1478,8 @@
 /// @nodoc
 abstract class $CrashCopyWith<$Res> {
   factory $CrashCopyWith(Crash value, $Res Function(Crash) then) =
-      _$CrashCopyWithImpl<$Res>;
+      _$CrashCopyWithImpl<$Res, Crash>;
+  @useResult
   $Res call(
       {EngineVariant engineVariant,
       List<CrashFrame> frames,
@@ -1498,53 +1490,59 @@
 }
 
 /// @nodoc
-class _$CrashCopyWithImpl<$Res> implements $CrashCopyWith<$Res> {
+class _$CrashCopyWithImpl<$Res, $Val extends Crash>
+    implements $CrashCopyWith<$Res> {
   _$CrashCopyWithImpl(this._value, this._then);
 
-  final Crash _value;
   // ignore: unused_field
-  final $Res Function(Crash) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? engineVariant = freezed,
-    Object? frames = freezed,
-    Object? format = freezed,
+    Object? engineVariant = null,
+    Object? frames = null,
+    Object? format = null,
     Object? androidMajorVersion = freezed,
   }) {
     return _then(_value.copyWith(
-      engineVariant: engineVariant == freezed
+      engineVariant: null == engineVariant
           ? _value.engineVariant
           : engineVariant // ignore: cast_nullable_to_non_nullable
               as EngineVariant,
-      frames: frames == freezed
+      frames: null == frames
           ? _value.frames
           : frames // ignore: cast_nullable_to_non_nullable
               as List<CrashFrame>,
-      format: format == freezed
+      format: null == format
           ? _value.format
           : format // ignore: cast_nullable_to_non_nullable
               as String,
-      androidMajorVersion: androidMajorVersion == freezed
+      androidMajorVersion: freezed == androidMajorVersion
           ? _value.androidMajorVersion
           : androidMajorVersion // ignore: cast_nullable_to_non_nullable
               as int?,
-    ));
+    ) as $Val);
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $EngineVariantCopyWith<$Res> get engineVariant {
     return $EngineVariantCopyWith<$Res>(_value.engineVariant, (value) {
-      return _then(_value.copyWith(engineVariant: value));
+      return _then(_value.copyWith(engineVariant: value) as $Val);
     });
   }
 }
 
 /// @nodoc
-abstract class _$$_CrashCopyWith<$Res> implements $CrashCopyWith<$Res> {
-  factory _$$_CrashCopyWith(_$_Crash value, $Res Function(_$_Crash) then) =
-      __$$_CrashCopyWithImpl<$Res>;
+abstract class _$$CrashImplCopyWith<$Res> implements $CrashCopyWith<$Res> {
+  factory _$$CrashImplCopyWith(
+          _$CrashImpl value, $Res Function(_$CrashImpl) then) =
+      __$$CrashImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {EngineVariant engineVariant,
       List<CrashFrame> frames,
@@ -1556,35 +1554,35 @@
 }
 
 /// @nodoc
-class __$$_CrashCopyWithImpl<$Res> extends _$CrashCopyWithImpl<$Res>
-    implements _$$_CrashCopyWith<$Res> {
-  __$$_CrashCopyWithImpl(_$_Crash _value, $Res Function(_$_Crash) _then)
-      : super(_value, (v) => _then(v as _$_Crash));
+class __$$CrashImplCopyWithImpl<$Res>
+    extends _$CrashCopyWithImpl<$Res, _$CrashImpl>
+    implements _$$CrashImplCopyWith<$Res> {
+  __$$CrashImplCopyWithImpl(
+      _$CrashImpl _value, $Res Function(_$CrashImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_Crash get _value => super._value as _$_Crash;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? engineVariant = freezed,
-    Object? frames = freezed,
-    Object? format = freezed,
+    Object? engineVariant = null,
+    Object? frames = null,
+    Object? format = null,
     Object? androidMajorVersion = freezed,
   }) {
-    return _then(_$_Crash(
-      engineVariant: engineVariant == freezed
+    return _then(_$CrashImpl(
+      engineVariant: null == engineVariant
           ? _value.engineVariant
           : engineVariant // ignore: cast_nullable_to_non_nullable
               as EngineVariant,
-      frames: frames == freezed
+      frames: null == frames
           ? _value._frames
           : frames // ignore: cast_nullable_to_non_nullable
               as List<CrashFrame>,
-      format: format == freezed
+      format: null == format
           ? _value.format
           : format // ignore: cast_nullable_to_non_nullable
               as String,
-      androidMajorVersion: androidMajorVersion == freezed
+      androidMajorVersion: freezed == androidMajorVersion
           ? _value.androidMajorVersion
           : androidMajorVersion // ignore: cast_nullable_to_non_nullable
               as int?,
@@ -1594,22 +1592,23 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$_Crash implements _Crash {
-  _$_Crash(
+class _$CrashImpl implements _Crash {
+  _$CrashImpl(
       {required this.engineVariant,
       required final List<CrashFrame> frames,
       required this.format,
       this.androidMajorVersion})
       : _frames = frames;
 
-  factory _$_Crash.fromJson(Map<String, dynamic> json) =>
-      _$$_CrashFromJson(json);
+  factory _$CrashImpl.fromJson(Map<String, dynamic> json) =>
+      _$$CrashImplFromJson(json);
 
   @override
   final EngineVariant engineVariant;
   final List<CrashFrame> _frames;
   @override
   List<CrashFrame> get frames {
+    if (_frames is EqualUnmodifiableListView) return _frames;
     // ignore: implicit_dynamic_type
     return EqualUnmodifiableListView(_frames);
   }
@@ -1625,35 +1624,36 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_Crash &&
-            const DeepCollectionEquality()
-                .equals(other.engineVariant, engineVariant) &&
+            other is _$CrashImpl &&
+            (identical(other.engineVariant, engineVariant) ||
+                other.engineVariant == engineVariant) &&
             const DeepCollectionEquality().equals(other._frames, _frames) &&
-            const DeepCollectionEquality().equals(other.format, format) &&
-            const DeepCollectionEquality()
-                .equals(other.androidMajorVersion, androidMajorVersion));
+            (identical(other.format, format) || other.format == format) &&
+            (identical(other.androidMajorVersion, androidMajorVersion) ||
+                other.androidMajorVersion == androidMajorVersion));
   }
 
   @JsonKey(ignore: true)
   @override
   int get hashCode => Object.hash(
       runtimeType,
-      const DeepCollectionEquality().hash(engineVariant),
+      engineVariant,
       const DeepCollectionEquality().hash(_frames),
-      const DeepCollectionEquality().hash(format),
-      const DeepCollectionEquality().hash(androidMajorVersion));
+      format,
+      androidMajorVersion);
 
   @JsonKey(ignore: true)
   @override
-  _$$_CrashCopyWith<_$_Crash> get copyWith =>
-      __$$_CrashCopyWithImpl<_$_Crash>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$CrashImplCopyWith<_$CrashImpl> get copyWith =>
+      __$$CrashImplCopyWithImpl<_$CrashImpl>(this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_CrashToJson(
+    return _$$CrashImplToJson(
       this,
     );
   }
@@ -1664,9 +1664,9 @@
       {required final EngineVariant engineVariant,
       required final List<CrashFrame> frames,
       required final String format,
-      final int? androidMajorVersion}) = _$_Crash;
+      final int? androidMajorVersion}) = _$CrashImpl;
 
-  factory _Crash.fromJson(Map<String, dynamic> json) = _$_Crash.fromJson;
+  factory _Crash.fromJson(Map<String, dynamic> json) = _$CrashImpl.fromJson;
 
   @override
   EngineVariant get engineVariant;
@@ -1678,7 +1678,7 @@
   int? get androidMajorVersion;
   @override
   @JsonKey(ignore: true)
-  _$$_CrashCopyWith<_$_Crash> get copyWith =>
+  _$$CrashImplCopyWith<_$CrashImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -1705,8 +1705,8 @@
       throw _privateConstructorUsedError;
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(List<CrashSymbolizationResult> results)? ok,
-    TResult Function(SymbolizationNote error)? error,
+    TResult? Function(List<CrashSymbolizationResult> results)? ok,
+    TResult? Function(SymbolizationNote error)? error,
   }) =>
       throw _privateConstructorUsedError;
   @optionalTypeArgs
@@ -1724,8 +1724,8 @@
       throw _privateConstructorUsedError;
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(SymbolizationResultOk value)? ok,
-    TResult Function(SymbolizationResultError value)? error,
+    TResult? Function(SymbolizationResultOk value)? ok,
+    TResult? Function(SymbolizationResultError value)? error,
   }) =>
       throw _privateConstructorUsedError;
   @optionalTypeArgs
@@ -1742,44 +1742,45 @@
 abstract class $SymbolizationResultCopyWith<$Res> {
   factory $SymbolizationResultCopyWith(
           SymbolizationResult value, $Res Function(SymbolizationResult) then) =
-      _$SymbolizationResultCopyWithImpl<$Res>;
+      _$SymbolizationResultCopyWithImpl<$Res, SymbolizationResult>;
 }
 
 /// @nodoc
-class _$SymbolizationResultCopyWithImpl<$Res>
+class _$SymbolizationResultCopyWithImpl<$Res, $Val extends SymbolizationResult>
     implements $SymbolizationResultCopyWith<$Res> {
   _$SymbolizationResultCopyWithImpl(this._value, this._then);
 
-  final SymbolizationResult _value;
   // ignore: unused_field
-  final $Res Function(SymbolizationResult) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 }
 
 /// @nodoc
-abstract class _$$SymbolizationResultOkCopyWith<$Res> {
-  factory _$$SymbolizationResultOkCopyWith(_$SymbolizationResultOk value,
-          $Res Function(_$SymbolizationResultOk) then) =
-      __$$SymbolizationResultOkCopyWithImpl<$Res>;
+abstract class _$$SymbolizationResultOkImplCopyWith<$Res> {
+  factory _$$SymbolizationResultOkImplCopyWith(
+          _$SymbolizationResultOkImpl value,
+          $Res Function(_$SymbolizationResultOkImpl) then) =
+      __$$SymbolizationResultOkImplCopyWithImpl<$Res>;
+  @useResult
   $Res call({List<CrashSymbolizationResult> results});
 }
 
 /// @nodoc
-class __$$SymbolizationResultOkCopyWithImpl<$Res>
-    extends _$SymbolizationResultCopyWithImpl<$Res>
-    implements _$$SymbolizationResultOkCopyWith<$Res> {
-  __$$SymbolizationResultOkCopyWithImpl(_$SymbolizationResultOk _value,
-      $Res Function(_$SymbolizationResultOk) _then)
-      : super(_value, (v) => _then(v as _$SymbolizationResultOk));
+class __$$SymbolizationResultOkImplCopyWithImpl<$Res>
+    extends _$SymbolizationResultCopyWithImpl<$Res, _$SymbolizationResultOkImpl>
+    implements _$$SymbolizationResultOkImplCopyWith<$Res> {
+  __$$SymbolizationResultOkImplCopyWithImpl(_$SymbolizationResultOkImpl _value,
+      $Res Function(_$SymbolizationResultOkImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$SymbolizationResultOk get _value => super._value as _$SymbolizationResultOk;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? results = freezed,
+    Object? results = null,
   }) {
-    return _then(_$SymbolizationResultOk(
-      results: results == freezed
+    return _then(_$SymbolizationResultOkImpl(
+      results: null == results
           ? _value._results
           : results // ignore: cast_nullable_to_non_nullable
               as List<CrashSymbolizationResult>,
@@ -1790,19 +1791,20 @@
 /// @nodoc
 
 @JsonSerializable(explicitToJson: true)
-class _$SymbolizationResultOk implements SymbolizationResultOk {
-  _$SymbolizationResultOk(
+class _$SymbolizationResultOkImpl implements SymbolizationResultOk {
+  _$SymbolizationResultOkImpl(
       {required final List<CrashSymbolizationResult> results,
       final String? $type})
       : _results = results,
         $type = $type ?? 'ok';
 
-  factory _$SymbolizationResultOk.fromJson(Map<String, dynamic> json) =>
-      _$$SymbolizationResultOkFromJson(json);
+  factory _$SymbolizationResultOkImpl.fromJson(Map<String, dynamic> json) =>
+      _$$SymbolizationResultOkImplFromJson(json);
 
   final List<CrashSymbolizationResult> _results;
   @override
   List<CrashSymbolizationResult> get results {
+    if (_results is EqualUnmodifiableListView) return _results;
     // ignore: implicit_dynamic_type
     return EqualUnmodifiableListView(_results);
   }
@@ -1816,10 +1818,10 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$SymbolizationResultOk &&
+            other is _$SymbolizationResultOkImpl &&
             const DeepCollectionEquality().equals(other._results, _results));
   }
 
@@ -1830,9 +1832,10 @@
 
   @JsonKey(ignore: true)
   @override
-  _$$SymbolizationResultOkCopyWith<_$SymbolizationResultOk> get copyWith =>
-      __$$SymbolizationResultOkCopyWithImpl<_$SymbolizationResultOk>(
-          this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$SymbolizationResultOkImplCopyWith<_$SymbolizationResultOkImpl>
+      get copyWith => __$$SymbolizationResultOkImplCopyWithImpl<
+          _$SymbolizationResultOkImpl>(this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -1846,8 +1849,8 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(List<CrashSymbolizationResult> results)? ok,
-    TResult Function(SymbolizationNote error)? error,
+    TResult? Function(List<CrashSymbolizationResult> results)? ok,
+    TResult? Function(SymbolizationNote error)? error,
   }) {
     return ok?.call(results);
   }
@@ -1877,8 +1880,8 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(SymbolizationResultOk value)? ok,
-    TResult Function(SymbolizationResultError value)? error,
+    TResult? Function(SymbolizationResultOk value)? ok,
+    TResult? Function(SymbolizationResultError value)? error,
   }) {
     return ok?.call(this);
   }
@@ -1898,7 +1901,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$SymbolizationResultOkToJson(
+    return _$$SymbolizationResultOkImplToJson(
       this,
     );
   }
@@ -1907,45 +1910,46 @@
 abstract class SymbolizationResultOk implements SymbolizationResult {
   factory SymbolizationResultOk(
           {required final List<CrashSymbolizationResult> results}) =
-      _$SymbolizationResultOk;
+      _$SymbolizationResultOkImpl;
 
   factory SymbolizationResultOk.fromJson(Map<String, dynamic> json) =
-      _$SymbolizationResultOk.fromJson;
+      _$SymbolizationResultOkImpl.fromJson;
 
   List<CrashSymbolizationResult> get results;
   @JsonKey(ignore: true)
-  _$$SymbolizationResultOkCopyWith<_$SymbolizationResultOk> get copyWith =>
-      throw _privateConstructorUsedError;
+  _$$SymbolizationResultOkImplCopyWith<_$SymbolizationResultOkImpl>
+      get copyWith => throw _privateConstructorUsedError;
 }
 
 /// @nodoc
-abstract class _$$SymbolizationResultErrorCopyWith<$Res> {
-  factory _$$SymbolizationResultErrorCopyWith(_$SymbolizationResultError value,
-          $Res Function(_$SymbolizationResultError) then) =
-      __$$SymbolizationResultErrorCopyWithImpl<$Res>;
+abstract class _$$SymbolizationResultErrorImplCopyWith<$Res> {
+  factory _$$SymbolizationResultErrorImplCopyWith(
+          _$SymbolizationResultErrorImpl value,
+          $Res Function(_$SymbolizationResultErrorImpl) then) =
+      __$$SymbolizationResultErrorImplCopyWithImpl<$Res>;
+  @useResult
   $Res call({SymbolizationNote error});
 
   $SymbolizationNoteCopyWith<$Res> get error;
 }
 
 /// @nodoc
-class __$$SymbolizationResultErrorCopyWithImpl<$Res>
-    extends _$SymbolizationResultCopyWithImpl<$Res>
-    implements _$$SymbolizationResultErrorCopyWith<$Res> {
-  __$$SymbolizationResultErrorCopyWithImpl(_$SymbolizationResultError _value,
-      $Res Function(_$SymbolizationResultError) _then)
-      : super(_value, (v) => _then(v as _$SymbolizationResultError));
+class __$$SymbolizationResultErrorImplCopyWithImpl<$Res>
+    extends _$SymbolizationResultCopyWithImpl<$Res,
+        _$SymbolizationResultErrorImpl>
+    implements _$$SymbolizationResultErrorImplCopyWith<$Res> {
+  __$$SymbolizationResultErrorImplCopyWithImpl(
+      _$SymbolizationResultErrorImpl _value,
+      $Res Function(_$SymbolizationResultErrorImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$SymbolizationResultError get _value =>
-      super._value as _$SymbolizationResultError;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? error = freezed,
+    Object? error = null,
   }) {
-    return _then(_$SymbolizationResultError(
-      error: error == freezed
+    return _then(_$SymbolizationResultErrorImpl(
+      error: null == error
           ? _value.error
           : error // ignore: cast_nullable_to_non_nullable
               as SymbolizationNote,
@@ -1953,6 +1957,7 @@
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $SymbolizationNoteCopyWith<$Res> get error {
     return $SymbolizationNoteCopyWith<$Res>(_value.error, (value) {
       return _then(_value.copyWith(error: value));
@@ -1963,12 +1968,12 @@
 /// @nodoc
 
 @JsonSerializable(explicitToJson: true)
-class _$SymbolizationResultError implements SymbolizationResultError {
-  _$SymbolizationResultError({required this.error, final String? $type})
+class _$SymbolizationResultErrorImpl implements SymbolizationResultError {
+  _$SymbolizationResultErrorImpl({required this.error, final String? $type})
       : $type = $type ?? 'error';
 
-  factory _$SymbolizationResultError.fromJson(Map<String, dynamic> json) =>
-      _$$SymbolizationResultErrorFromJson(json);
+  factory _$SymbolizationResultErrorImpl.fromJson(Map<String, dynamic> json) =>
+      _$$SymbolizationResultErrorImplFromJson(json);
 
   @override
   final SymbolizationNote error;
@@ -1982,24 +1987,23 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$SymbolizationResultError &&
-            const DeepCollectionEquality().equals(other.error, error));
+            other is _$SymbolizationResultErrorImpl &&
+            (identical(other.error, error) || other.error == error));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode =>
-      Object.hash(runtimeType, const DeepCollectionEquality().hash(error));
+  int get hashCode => Object.hash(runtimeType, error);
 
   @JsonKey(ignore: true)
   @override
-  _$$SymbolizationResultErrorCopyWith<_$SymbolizationResultError>
-      get copyWith =>
-          __$$SymbolizationResultErrorCopyWithImpl<_$SymbolizationResultError>(
-              this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$SymbolizationResultErrorImplCopyWith<_$SymbolizationResultErrorImpl>
+      get copyWith => __$$SymbolizationResultErrorImplCopyWithImpl<
+          _$SymbolizationResultErrorImpl>(this, _$identity);
 
   @override
   @optionalTypeArgs
@@ -2013,8 +2017,8 @@
   @override
   @optionalTypeArgs
   TResult? whenOrNull<TResult extends Object?>({
-    TResult Function(List<CrashSymbolizationResult> results)? ok,
-    TResult Function(SymbolizationNote error)? error,
+    TResult? Function(List<CrashSymbolizationResult> results)? ok,
+    TResult? Function(SymbolizationNote error)? error,
   }) {
     return error?.call(this.error);
   }
@@ -2044,8 +2048,8 @@
   @override
   @optionalTypeArgs
   TResult? mapOrNull<TResult extends Object?>({
-    TResult Function(SymbolizationResultOk value)? ok,
-    TResult Function(SymbolizationResultError value)? error,
+    TResult? Function(SymbolizationResultOk value)? ok,
+    TResult? Function(SymbolizationResultError value)? error,
   }) {
     return error?.call(this);
   }
@@ -2065,7 +2069,7 @@
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$SymbolizationResultErrorToJson(
+    return _$$SymbolizationResultErrorImplToJson(
       this,
     );
   }
@@ -2073,14 +2077,14 @@
 
 abstract class SymbolizationResultError implements SymbolizationResult {
   factory SymbolizationResultError({required final SymbolizationNote error}) =
-      _$SymbolizationResultError;
+      _$SymbolizationResultErrorImpl;
 
   factory SymbolizationResultError.fromJson(Map<String, dynamic> json) =
-      _$SymbolizationResultError.fromJson;
+      _$SymbolizationResultErrorImpl.fromJson;
 
   SymbolizationNote get error;
   @JsonKey(ignore: true)
-  _$$SymbolizationResultErrorCopyWith<_$SymbolizationResultError>
+  _$$SymbolizationResultErrorImplCopyWith<_$SymbolizationResultErrorImpl>
       get copyWith => throw _privateConstructorUsedError;
 }
 
@@ -2108,7 +2112,8 @@
 abstract class $CrashSymbolizationResultCopyWith<$Res> {
   factory $CrashSymbolizationResultCopyWith(CrashSymbolizationResult value,
           $Res Function(CrashSymbolizationResult) then) =
-      _$CrashSymbolizationResultCopyWithImpl<$Res>;
+      _$CrashSymbolizationResultCopyWithImpl<$Res, CrashSymbolizationResult>;
+  @useResult
   $Res call(
       {Crash crash,
       EngineBuild? engineBuild,
@@ -2120,68 +2125,74 @@
 }
 
 /// @nodoc
-class _$CrashSymbolizationResultCopyWithImpl<$Res>
+class _$CrashSymbolizationResultCopyWithImpl<$Res,
+        $Val extends CrashSymbolizationResult>
     implements $CrashSymbolizationResultCopyWith<$Res> {
   _$CrashSymbolizationResultCopyWithImpl(this._value, this._then);
 
-  final CrashSymbolizationResult _value;
   // ignore: unused_field
-  final $Res Function(CrashSymbolizationResult) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? crash = freezed,
+    Object? crash = null,
     Object? engineBuild = freezed,
     Object? symbolized = freezed,
-    Object? notes = freezed,
+    Object? notes = null,
   }) {
     return _then(_value.copyWith(
-      crash: crash == freezed
+      crash: null == crash
           ? _value.crash
           : crash // ignore: cast_nullable_to_non_nullable
               as Crash,
-      engineBuild: engineBuild == freezed
+      engineBuild: freezed == engineBuild
           ? _value.engineBuild
           : engineBuild // ignore: cast_nullable_to_non_nullable
               as EngineBuild?,
-      symbolized: symbolized == freezed
+      symbolized: freezed == symbolized
           ? _value.symbolized
           : symbolized // ignore: cast_nullable_to_non_nullable
               as String?,
-      notes: notes == freezed
+      notes: null == notes
           ? _value.notes
           : notes // ignore: cast_nullable_to_non_nullable
               as List<SymbolizationNote>,
-    ));
+    ) as $Val);
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $CrashCopyWith<$Res> get crash {
     return $CrashCopyWith<$Res>(_value.crash, (value) {
-      return _then(_value.copyWith(crash: value));
+      return _then(_value.copyWith(crash: value) as $Val);
     });
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $EngineBuildCopyWith<$Res>? get engineBuild {
     if (_value.engineBuild == null) {
       return null;
     }
 
     return $EngineBuildCopyWith<$Res>(_value.engineBuild!, (value) {
-      return _then(_value.copyWith(engineBuild: value));
+      return _then(_value.copyWith(engineBuild: value) as $Val);
     });
   }
 }
 
 /// @nodoc
-abstract class _$$_CrashSymbolizationResultCopyWith<$Res>
+abstract class _$$CrashSymbolizationResultImplCopyWith<$Res>
     implements $CrashSymbolizationResultCopyWith<$Res> {
-  factory _$$_CrashSymbolizationResultCopyWith(
-          _$_CrashSymbolizationResult value,
-          $Res Function(_$_CrashSymbolizationResult) then) =
-      __$$_CrashSymbolizationResultCopyWithImpl<$Res>;
+  factory _$$CrashSymbolizationResultImplCopyWith(
+          _$CrashSymbolizationResultImpl value,
+          $Res Function(_$CrashSymbolizationResultImpl) then) =
+      __$$CrashSymbolizationResultImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {Crash crash,
       EngineBuild? engineBuild,
@@ -2195,38 +2206,37 @@
 }
 
 /// @nodoc
-class __$$_CrashSymbolizationResultCopyWithImpl<$Res>
-    extends _$CrashSymbolizationResultCopyWithImpl<$Res>
-    implements _$$_CrashSymbolizationResultCopyWith<$Res> {
-  __$$_CrashSymbolizationResultCopyWithImpl(_$_CrashSymbolizationResult _value,
-      $Res Function(_$_CrashSymbolizationResult) _then)
-      : super(_value, (v) => _then(v as _$_CrashSymbolizationResult));
+class __$$CrashSymbolizationResultImplCopyWithImpl<$Res>
+    extends _$CrashSymbolizationResultCopyWithImpl<$Res,
+        _$CrashSymbolizationResultImpl>
+    implements _$$CrashSymbolizationResultImplCopyWith<$Res> {
+  __$$CrashSymbolizationResultImplCopyWithImpl(
+      _$CrashSymbolizationResultImpl _value,
+      $Res Function(_$CrashSymbolizationResultImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_CrashSymbolizationResult get _value =>
-      super._value as _$_CrashSymbolizationResult;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? crash = freezed,
+    Object? crash = null,
     Object? engineBuild = freezed,
     Object? symbolized = freezed,
-    Object? notes = freezed,
+    Object? notes = null,
   }) {
-    return _then(_$_CrashSymbolizationResult(
-      crash: crash == freezed
+    return _then(_$CrashSymbolizationResultImpl(
+      crash: null == crash
           ? _value.crash
           : crash // ignore: cast_nullable_to_non_nullable
               as Crash,
-      engineBuild: engineBuild == freezed
+      engineBuild: freezed == engineBuild
           ? _value.engineBuild
           : engineBuild // ignore: cast_nullable_to_non_nullable
               as EngineBuild?,
-      symbolized: symbolized == freezed
+      symbolized: freezed == symbolized
           ? _value.symbolized
           : symbolized // ignore: cast_nullable_to_non_nullable
               as String?,
-      notes: notes == freezed
+      notes: null == notes
           ? _value._notes
           : notes // ignore: cast_nullable_to_non_nullable
               as List<SymbolizationNote>,
@@ -2237,16 +2247,16 @@
 /// @nodoc
 
 @JsonSerializable(explicitToJson: true)
-class _$_CrashSymbolizationResult implements _CrashSymbolizationResult {
-  _$_CrashSymbolizationResult(
+class _$CrashSymbolizationResultImpl implements _CrashSymbolizationResult {
+  _$CrashSymbolizationResultImpl(
       {required this.crash,
       required this.engineBuild,
       required this.symbolized,
       final List<SymbolizationNote> notes = const []})
       : _notes = notes;
 
-  factory _$_CrashSymbolizationResult.fromJson(Map<String, dynamic> json) =>
-      _$$_CrashSymbolizationResultFromJson(json);
+  factory _$CrashSymbolizationResultImpl.fromJson(Map<String, dynamic> json) =>
+      _$$CrashSymbolizationResultImplFromJson(json);
 
   @override
   final Crash crash;
@@ -2260,6 +2270,7 @@
   @override
   @JsonKey()
   List<SymbolizationNote> get notes {
+    if (_notes is EqualUnmodifiableListView) return _notes;
     // ignore: implicit_dynamic_type
     return EqualUnmodifiableListView(_notes);
   }
@@ -2270,36 +2281,33 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_CrashSymbolizationResult &&
-            const DeepCollectionEquality().equals(other.crash, crash) &&
-            const DeepCollectionEquality()
-                .equals(other.engineBuild, engineBuild) &&
-            const DeepCollectionEquality()
-                .equals(other.symbolized, symbolized) &&
+            other is _$CrashSymbolizationResultImpl &&
+            (identical(other.crash, crash) || other.crash == crash) &&
+            (identical(other.engineBuild, engineBuild) ||
+                other.engineBuild == engineBuild) &&
+            (identical(other.symbolized, symbolized) ||
+                other.symbolized == symbolized) &&
             const DeepCollectionEquality().equals(other._notes, _notes));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(crash),
-      const DeepCollectionEquality().hash(engineBuild),
-      const DeepCollectionEquality().hash(symbolized),
+  int get hashCode => Object.hash(runtimeType, crash, engineBuild, symbolized,
       const DeepCollectionEquality().hash(_notes));
 
   @JsonKey(ignore: true)
   @override
-  _$$_CrashSymbolizationResultCopyWith<_$_CrashSymbolizationResult>
-      get copyWith => __$$_CrashSymbolizationResultCopyWithImpl<
-          _$_CrashSymbolizationResult>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$CrashSymbolizationResultImplCopyWith<_$CrashSymbolizationResultImpl>
+      get copyWith => __$$CrashSymbolizationResultImplCopyWithImpl<
+          _$CrashSymbolizationResultImpl>(this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_CrashSymbolizationResultToJson(
+    return _$$CrashSymbolizationResultImplToJson(
       this,
     );
   }
@@ -2310,10 +2318,10 @@
       {required final Crash crash,
       required final EngineBuild? engineBuild,
       required final String? symbolized,
-      final List<SymbolizationNote> notes}) = _$_CrashSymbolizationResult;
+      final List<SymbolizationNote> notes}) = _$CrashSymbolizationResultImpl;
 
   factory _CrashSymbolizationResult.fromJson(Map<String, dynamic> json) =
-      _$_CrashSymbolizationResult.fromJson;
+      _$CrashSymbolizationResultImpl.fromJson;
 
   @override
   Crash get crash;
@@ -2327,7 +2335,7 @@
   List<SymbolizationNote> get notes;
   @override
   @JsonKey(ignore: true)
-  _$$_CrashSymbolizationResultCopyWith<_$_CrashSymbolizationResult>
+  _$$CrashSymbolizationResultImplCopyWith<_$CrashSymbolizationResultImpl>
       get copyWith => throw _privateConstructorUsedError;
 }
 
@@ -2350,69 +2358,71 @@
 abstract class $SymbolizationNoteCopyWith<$Res> {
   factory $SymbolizationNoteCopyWith(
           SymbolizationNote value, $Res Function(SymbolizationNote) then) =
-      _$SymbolizationNoteCopyWithImpl<$Res>;
+      _$SymbolizationNoteCopyWithImpl<$Res, SymbolizationNote>;
+  @useResult
   $Res call({SymbolizationNoteKind kind, String? message});
 }
 
 /// @nodoc
-class _$SymbolizationNoteCopyWithImpl<$Res>
+class _$SymbolizationNoteCopyWithImpl<$Res, $Val extends SymbolizationNote>
     implements $SymbolizationNoteCopyWith<$Res> {
   _$SymbolizationNoteCopyWithImpl(this._value, this._then);
 
-  final SymbolizationNote _value;
   // ignore: unused_field
-  final $Res Function(SymbolizationNote) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? kind = freezed,
+    Object? kind = null,
     Object? message = freezed,
   }) {
     return _then(_value.copyWith(
-      kind: kind == freezed
+      kind: null == kind
           ? _value.kind
           : kind // ignore: cast_nullable_to_non_nullable
               as SymbolizationNoteKind,
-      message: message == freezed
+      message: freezed == message
           ? _value.message
           : message // ignore: cast_nullable_to_non_nullable
               as String?,
-    ));
+    ) as $Val);
   }
 }
 
 /// @nodoc
-abstract class _$$_SymbolizationNoteCopyWith<$Res>
+abstract class _$$SymbolizationNoteImplCopyWith<$Res>
     implements $SymbolizationNoteCopyWith<$Res> {
-  factory _$$_SymbolizationNoteCopyWith(_$_SymbolizationNote value,
-          $Res Function(_$_SymbolizationNote) then) =
-      __$$_SymbolizationNoteCopyWithImpl<$Res>;
+  factory _$$SymbolizationNoteImplCopyWith(_$SymbolizationNoteImpl value,
+          $Res Function(_$SymbolizationNoteImpl) then) =
+      __$$SymbolizationNoteImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call({SymbolizationNoteKind kind, String? message});
 }
 
 /// @nodoc
-class __$$_SymbolizationNoteCopyWithImpl<$Res>
-    extends _$SymbolizationNoteCopyWithImpl<$Res>
-    implements _$$_SymbolizationNoteCopyWith<$Res> {
-  __$$_SymbolizationNoteCopyWithImpl(
-      _$_SymbolizationNote _value, $Res Function(_$_SymbolizationNote) _then)
-      : super(_value, (v) => _then(v as _$_SymbolizationNote));
+class __$$SymbolizationNoteImplCopyWithImpl<$Res>
+    extends _$SymbolizationNoteCopyWithImpl<$Res, _$SymbolizationNoteImpl>
+    implements _$$SymbolizationNoteImplCopyWith<$Res> {
+  __$$SymbolizationNoteImplCopyWithImpl(_$SymbolizationNoteImpl _value,
+      $Res Function(_$SymbolizationNoteImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_SymbolizationNote get _value => super._value as _$_SymbolizationNote;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? kind = freezed,
+    Object? kind = null,
     Object? message = freezed,
   }) {
-    return _then(_$_SymbolizationNote(
-      kind: kind == freezed
+    return _then(_$SymbolizationNoteImpl(
+      kind: null == kind
           ? _value.kind
           : kind // ignore: cast_nullable_to_non_nullable
               as SymbolizationNoteKind,
-      message: message == freezed
+      message: freezed == message
           ? _value.message
           : message // ignore: cast_nullable_to_non_nullable
               as String?,
@@ -2422,11 +2432,11 @@
 
 /// @nodoc
 @JsonSerializable()
-class _$_SymbolizationNote implements _SymbolizationNote {
-  _$_SymbolizationNote({required this.kind, this.message});
+class _$SymbolizationNoteImpl implements _SymbolizationNote {
+  _$SymbolizationNoteImpl({required this.kind, this.message});
 
-  factory _$_SymbolizationNote.fromJson(Map<String, dynamic> json) =>
-      _$$_SymbolizationNoteFromJson(json);
+  factory _$SymbolizationNoteImpl.fromJson(Map<String, dynamic> json) =>
+      _$$SymbolizationNoteImplFromJson(json);
 
   @override
   final SymbolizationNoteKind kind;
@@ -2439,30 +2449,28 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_SymbolizationNote &&
-            const DeepCollectionEquality().equals(other.kind, kind) &&
-            const DeepCollectionEquality().equals(other.message, message));
+            other is _$SymbolizationNoteImpl &&
+            (identical(other.kind, kind) || other.kind == kind) &&
+            (identical(other.message, message) || other.message == message));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(kind),
-      const DeepCollectionEquality().hash(message));
+  int get hashCode => Object.hash(runtimeType, kind, message);
 
   @JsonKey(ignore: true)
   @override
-  _$$_SymbolizationNoteCopyWith<_$_SymbolizationNote> get copyWith =>
-      __$$_SymbolizationNoteCopyWithImpl<_$_SymbolizationNote>(
+  @pragma('vm:prefer-inline')
+  _$$SymbolizationNoteImplCopyWith<_$SymbolizationNoteImpl> get copyWith =>
+      __$$SymbolizationNoteImplCopyWithImpl<_$SymbolizationNoteImpl>(
           this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_SymbolizationNoteToJson(
+    return _$$SymbolizationNoteImplToJson(
       this,
     );
   }
@@ -2471,10 +2479,10 @@
 abstract class _SymbolizationNote implements SymbolizationNote {
   factory _SymbolizationNote(
       {required final SymbolizationNoteKind kind,
-      final String? message}) = _$_SymbolizationNote;
+      final String? message}) = _$SymbolizationNoteImpl;
 
   factory _SymbolizationNote.fromJson(Map<String, dynamic> json) =
-      _$_SymbolizationNote.fromJson;
+      _$SymbolizationNoteImpl.fromJson;
 
   @override
   SymbolizationNoteKind get kind;
@@ -2482,7 +2490,7 @@
   String? get message;
   @override
   @JsonKey(ignore: true)
-  _$$_SymbolizationNoteCopyWith<_$_SymbolizationNote> get copyWith =>
+  _$$SymbolizationNoteImplCopyWith<_$SymbolizationNoteImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -2509,7 +2517,8 @@
 abstract class $BotCommandCopyWith<$Res> {
   factory $BotCommandCopyWith(
           BotCommand value, $Res Function(BotCommand) then) =
-      _$BotCommandCopyWithImpl<$Res>;
+      _$BotCommandCopyWithImpl<$Res, BotCommand>;
+  @useResult
   $Res call(
       {SymbolizationOverrides overrides,
       bool symbolizeThis,
@@ -2519,50 +2528,55 @@
 }
 
 /// @nodoc
-class _$BotCommandCopyWithImpl<$Res> implements $BotCommandCopyWith<$Res> {
+class _$BotCommandCopyWithImpl<$Res, $Val extends BotCommand>
+    implements $BotCommandCopyWith<$Res> {
   _$BotCommandCopyWithImpl(this._value, this._then);
 
-  final BotCommand _value;
   // ignore: unused_field
-  final $Res Function(BotCommand) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? overrides = freezed,
-    Object? symbolizeThis = freezed,
-    Object? worklist = freezed,
+    Object? overrides = null,
+    Object? symbolizeThis = null,
+    Object? worklist = null,
   }) {
     return _then(_value.copyWith(
-      overrides: overrides == freezed
+      overrides: null == overrides
           ? _value.overrides
           : overrides // ignore: cast_nullable_to_non_nullable
               as SymbolizationOverrides,
-      symbolizeThis: symbolizeThis == freezed
+      symbolizeThis: null == symbolizeThis
           ? _value.symbolizeThis
           : symbolizeThis // ignore: cast_nullable_to_non_nullable
               as bool,
-      worklist: worklist == freezed
+      worklist: null == worklist
           ? _value.worklist
           : worklist // ignore: cast_nullable_to_non_nullable
               as Set<String>,
-    ));
+    ) as $Val);
   }
 
   @override
+  @pragma('vm:prefer-inline')
   $SymbolizationOverridesCopyWith<$Res> get overrides {
     return $SymbolizationOverridesCopyWith<$Res>(_value.overrides, (value) {
-      return _then(_value.copyWith(overrides: value));
+      return _then(_value.copyWith(overrides: value) as $Val);
     });
   }
 }
 
 /// @nodoc
-abstract class _$$_BotCommandCopyWith<$Res>
+abstract class _$$BotCommandImplCopyWith<$Res>
     implements $BotCommandCopyWith<$Res> {
-  factory _$$_BotCommandCopyWith(
-          _$_BotCommand value, $Res Function(_$_BotCommand) then) =
-      __$$_BotCommandCopyWithImpl<$Res>;
+  factory _$$BotCommandImplCopyWith(
+          _$BotCommandImpl value, $Res Function(_$BotCommandImpl) then) =
+      __$$BotCommandImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {SymbolizationOverrides overrides,
       bool symbolizeThis,
@@ -2573,31 +2587,30 @@
 }
 
 /// @nodoc
-class __$$_BotCommandCopyWithImpl<$Res> extends _$BotCommandCopyWithImpl<$Res>
-    implements _$$_BotCommandCopyWith<$Res> {
-  __$$_BotCommandCopyWithImpl(
-      _$_BotCommand _value, $Res Function(_$_BotCommand) _then)
-      : super(_value, (v) => _then(v as _$_BotCommand));
+class __$$BotCommandImplCopyWithImpl<$Res>
+    extends _$BotCommandCopyWithImpl<$Res, _$BotCommandImpl>
+    implements _$$BotCommandImplCopyWith<$Res> {
+  __$$BotCommandImplCopyWithImpl(
+      _$BotCommandImpl _value, $Res Function(_$BotCommandImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_BotCommand get _value => super._value as _$_BotCommand;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? overrides = freezed,
-    Object? symbolizeThis = freezed,
-    Object? worklist = freezed,
+    Object? overrides = null,
+    Object? symbolizeThis = null,
+    Object? worklist = null,
   }) {
-    return _then(_$_BotCommand(
-      overrides: overrides == freezed
+    return _then(_$BotCommandImpl(
+      overrides: null == overrides
           ? _value.overrides
           : overrides // ignore: cast_nullable_to_non_nullable
               as SymbolizationOverrides,
-      symbolizeThis: symbolizeThis == freezed
+      symbolizeThis: null == symbolizeThis
           ? _value.symbolizeThis
           : symbolizeThis // ignore: cast_nullable_to_non_nullable
               as bool,
-      worklist: worklist == freezed
+      worklist: null == worklist
           ? _value._worklist
           : worklist // ignore: cast_nullable_to_non_nullable
               as Set<String>,
@@ -2607,8 +2620,8 @@
 
 /// @nodoc
 
-class _$_BotCommand implements _BotCommand {
-  _$_BotCommand(
+class _$BotCommandImpl implements _BotCommand {
+  _$BotCommandImpl(
       {required this.overrides,
       required this.symbolizeThis,
       required final Set<String> worklist})
@@ -2632,6 +2645,7 @@
   /// is either in `issue-id` or in `issuecomment-id` format.
   @override
   Set<String> get worklist {
+    if (_worklist is EqualUnmodifiableSetView) return _worklist;
     // ignore: implicit_dynamic_type
     return EqualUnmodifiableSetView(_worklist);
   }
@@ -2642,34 +2656,33 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_BotCommand &&
-            const DeepCollectionEquality().equals(other.overrides, overrides) &&
-            const DeepCollectionEquality()
-                .equals(other.symbolizeThis, symbolizeThis) &&
+            other is _$BotCommandImpl &&
+            (identical(other.overrides, overrides) ||
+                other.overrides == overrides) &&
+            (identical(other.symbolizeThis, symbolizeThis) ||
+                other.symbolizeThis == symbolizeThis) &&
             const DeepCollectionEquality().equals(other._worklist, _worklist));
   }
 
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(overrides),
-      const DeepCollectionEquality().hash(symbolizeThis),
+  int get hashCode => Object.hash(runtimeType, overrides, symbolizeThis,
       const DeepCollectionEquality().hash(_worklist));
 
   @JsonKey(ignore: true)
   @override
-  _$$_BotCommandCopyWith<_$_BotCommand> get copyWith =>
-      __$$_BotCommandCopyWithImpl<_$_BotCommand>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$BotCommandImplCopyWith<_$BotCommandImpl> get copyWith =>
+      __$$BotCommandImplCopyWithImpl<_$BotCommandImpl>(this, _$identity);
 }
 
 abstract class _BotCommand implements BotCommand {
   factory _BotCommand(
       {required final SymbolizationOverrides overrides,
       required final bool symbolizeThis,
-      required final Set<String> worklist}) = _$_BotCommand;
+      required final Set<String> worklist}) = _$BotCommandImpl;
 
   @override
 
@@ -2688,7 +2701,7 @@
   Set<String> get worklist;
   @override
   @JsonKey(ignore: true)
-  _$$_BotCommandCopyWith<_$_BotCommand> get copyWith =>
+  _$$BotCommandImplCopyWith<_$BotCommandImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
 
@@ -2711,7 +2724,8 @@
 abstract class $SymbolizationOverridesCopyWith<$Res> {
   factory $SymbolizationOverridesCopyWith(SymbolizationOverrides value,
           $Res Function(SymbolizationOverrides) then) =
-      _$SymbolizationOverridesCopyWithImpl<$Res>;
+      _$SymbolizationOverridesCopyWithImpl<$Res, SymbolizationOverrides>;
+  @useResult
   $Res call(
       {String? engineHash,
       String? flutterVersion,
@@ -2723,64 +2737,69 @@
 }
 
 /// @nodoc
-class _$SymbolizationOverridesCopyWithImpl<$Res>
+class _$SymbolizationOverridesCopyWithImpl<$Res,
+        $Val extends SymbolizationOverrides>
     implements $SymbolizationOverridesCopyWith<$Res> {
   _$SymbolizationOverridesCopyWithImpl(this._value, this._then);
 
-  final SymbolizationOverrides _value;
   // ignore: unused_field
-  final $Res Function(SymbolizationOverrides) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
     Object? engineHash = freezed,
     Object? flutterVersion = freezed,
     Object? arch = freezed,
     Object? mode = freezed,
-    Object? force = freezed,
+    Object? force = null,
     Object? format = freezed,
     Object? os = freezed,
   }) {
     return _then(_value.copyWith(
-      engineHash: engineHash == freezed
+      engineHash: freezed == engineHash
           ? _value.engineHash
           : engineHash // ignore: cast_nullable_to_non_nullable
               as String?,
-      flutterVersion: flutterVersion == freezed
+      flutterVersion: freezed == flutterVersion
           ? _value.flutterVersion
           : flutterVersion // ignore: cast_nullable_to_non_nullable
               as String?,
-      arch: arch == freezed
+      arch: freezed == arch
           ? _value.arch
           : arch // ignore: cast_nullable_to_non_nullable
               as String?,
-      mode: mode == freezed
+      mode: freezed == mode
           ? _value.mode
           : mode // ignore: cast_nullable_to_non_nullable
               as String?,
-      force: force == freezed
+      force: null == force
           ? _value.force
           : force // ignore: cast_nullable_to_non_nullable
               as bool,
-      format: format == freezed
+      format: freezed == format
           ? _value.format
           : format // ignore: cast_nullable_to_non_nullable
               as String?,
-      os: os == freezed
+      os: freezed == os
           ? _value.os
           : os // ignore: cast_nullable_to_non_nullable
               as String?,
-    ));
+    ) as $Val);
   }
 }
 
 /// @nodoc
-abstract class _$$_SymbolizationOverridesCopyWith<$Res>
+abstract class _$$SymbolizationOverridesImplCopyWith<$Res>
     implements $SymbolizationOverridesCopyWith<$Res> {
-  factory _$$_SymbolizationOverridesCopyWith(_$_SymbolizationOverrides value,
-          $Res Function(_$_SymbolizationOverrides) then) =
-      __$$_SymbolizationOverridesCopyWithImpl<$Res>;
+  factory _$$SymbolizationOverridesImplCopyWith(
+          _$SymbolizationOverridesImpl value,
+          $Res Function(_$SymbolizationOverridesImpl) then) =
+      __$$SymbolizationOverridesImplCopyWithImpl<$Res>;
   @override
+  @useResult
   $Res call(
       {String? engineHash,
       String? flutterVersion,
@@ -2792,53 +2811,52 @@
 }
 
 /// @nodoc
-class __$$_SymbolizationOverridesCopyWithImpl<$Res>
-    extends _$SymbolizationOverridesCopyWithImpl<$Res>
-    implements _$$_SymbolizationOverridesCopyWith<$Res> {
-  __$$_SymbolizationOverridesCopyWithImpl(_$_SymbolizationOverrides _value,
-      $Res Function(_$_SymbolizationOverrides) _then)
-      : super(_value, (v) => _then(v as _$_SymbolizationOverrides));
+class __$$SymbolizationOverridesImplCopyWithImpl<$Res>
+    extends _$SymbolizationOverridesCopyWithImpl<$Res,
+        _$SymbolizationOverridesImpl>
+    implements _$$SymbolizationOverridesImplCopyWith<$Res> {
+  __$$SymbolizationOverridesImplCopyWithImpl(
+      _$SymbolizationOverridesImpl _value,
+      $Res Function(_$SymbolizationOverridesImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_SymbolizationOverrides get _value =>
-      super._value as _$_SymbolizationOverrides;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
     Object? engineHash = freezed,
     Object? flutterVersion = freezed,
     Object? arch = freezed,
     Object? mode = freezed,
-    Object? force = freezed,
+    Object? force = null,
     Object? format = freezed,
     Object? os = freezed,
   }) {
-    return _then(_$_SymbolizationOverrides(
-      engineHash: engineHash == freezed
+    return _then(_$SymbolizationOverridesImpl(
+      engineHash: freezed == engineHash
           ? _value.engineHash
           : engineHash // ignore: cast_nullable_to_non_nullable
               as String?,
-      flutterVersion: flutterVersion == freezed
+      flutterVersion: freezed == flutterVersion
           ? _value.flutterVersion
           : flutterVersion // ignore: cast_nullable_to_non_nullable
               as String?,
-      arch: arch == freezed
+      arch: freezed == arch
           ? _value.arch
           : arch // ignore: cast_nullable_to_non_nullable
               as String?,
-      mode: mode == freezed
+      mode: freezed == mode
           ? _value.mode
           : mode // ignore: cast_nullable_to_non_nullable
               as String?,
-      force: force == freezed
+      force: null == force
           ? _value.force
           : force // ignore: cast_nullable_to_non_nullable
               as bool,
-      format: format == freezed
+      format: freezed == format
           ? _value.format
           : format // ignore: cast_nullable_to_non_nullable
               as String?,
-      os: os == freezed
+      os: freezed == os
           ? _value.os
           : os // ignore: cast_nullable_to_non_nullable
               as String?,
@@ -2848,8 +2866,8 @@
 
 /// @nodoc
 
-class _$_SymbolizationOverrides implements _SymbolizationOverrides {
-  _$_SymbolizationOverrides(
+class _$SymbolizationOverridesImpl implements _SymbolizationOverrides {
+  _$SymbolizationOverridesImpl(
       {this.engineHash,
       this.flutterVersion,
       this.arch,
@@ -2880,37 +2898,31 @@
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_SymbolizationOverrides &&
-            const DeepCollectionEquality()
-                .equals(other.engineHash, engineHash) &&
-            const DeepCollectionEquality()
-                .equals(other.flutterVersion, flutterVersion) &&
-            const DeepCollectionEquality().equals(other.arch, arch) &&
-            const DeepCollectionEquality().equals(other.mode, mode) &&
-            const DeepCollectionEquality().equals(other.force, force) &&
-            const DeepCollectionEquality().equals(other.format, format) &&
-            const DeepCollectionEquality().equals(other.os, os));
+            other is _$SymbolizationOverridesImpl &&
+            (identical(other.engineHash, engineHash) ||
+                other.engineHash == engineHash) &&
+            (identical(other.flutterVersion, flutterVersion) ||
+                other.flutterVersion == flutterVersion) &&
+            (identical(other.arch, arch) || other.arch == arch) &&
+            (identical(other.mode, mode) || other.mode == mode) &&
+            (identical(other.force, force) || other.force == force) &&
+            (identical(other.format, format) || other.format == format) &&
+            (identical(other.os, os) || other.os == os));
   }
 
   @override
   int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(engineHash),
-      const DeepCollectionEquality().hash(flutterVersion),
-      const DeepCollectionEquality().hash(arch),
-      const DeepCollectionEquality().hash(mode),
-      const DeepCollectionEquality().hash(force),
-      const DeepCollectionEquality().hash(format),
-      const DeepCollectionEquality().hash(os));
+      runtimeType, engineHash, flutterVersion, arch, mode, force, format, os);
 
   @JsonKey(ignore: true)
   @override
-  _$$_SymbolizationOverridesCopyWith<_$_SymbolizationOverrides> get copyWith =>
-      __$$_SymbolizationOverridesCopyWithImpl<_$_SymbolizationOverrides>(
-          this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$SymbolizationOverridesImplCopyWith<_$SymbolizationOverridesImpl>
+      get copyWith => __$$SymbolizationOverridesImplCopyWithImpl<
+          _$SymbolizationOverridesImpl>(this, _$identity);
 }
 
 abstract class _SymbolizationOverrides implements SymbolizationOverrides {
@@ -2921,7 +2933,7 @@
       final String? mode,
       final bool force,
       final String? format,
-      final String? os}) = _$_SymbolizationOverrides;
+      final String? os}) = _$SymbolizationOverridesImpl;
 
   @override
   String? get engineHash;
@@ -2939,8 +2951,8 @@
   String? get os;
   @override
   @JsonKey(ignore: true)
-  _$$_SymbolizationOverridesCopyWith<_$_SymbolizationOverrides> get copyWith =>
-      throw _privateConstructorUsedError;
+  _$$SymbolizationOverridesImplCopyWith<_$SymbolizationOverridesImpl>
+      get copyWith => throw _privateConstructorUsedError;
 }
 
 ServerConfig _$ServerConfigFromJson(Map<String, dynamic> json) {
@@ -2950,8 +2962,6 @@
 /// @nodoc
 mixin _$ServerConfig {
   String get githubToken => throw _privateConstructorUsedError;
-  String get sendgridToken => throw _privateConstructorUsedError;
-  String get failureEmail => throw _privateConstructorUsedError;
 
   Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
   @JsonKey(ignore: true)
@@ -2963,159 +2973,122 @@
 abstract class $ServerConfigCopyWith<$Res> {
   factory $ServerConfigCopyWith(
           ServerConfig value, $Res Function(ServerConfig) then) =
-      _$ServerConfigCopyWithImpl<$Res>;
-  $Res call({String githubToken, String sendgridToken, String failureEmail});
+      _$ServerConfigCopyWithImpl<$Res, ServerConfig>;
+  @useResult
+  $Res call({String githubToken});
 }
 
 /// @nodoc
-class _$ServerConfigCopyWithImpl<$Res> implements $ServerConfigCopyWith<$Res> {
+class _$ServerConfigCopyWithImpl<$Res, $Val extends ServerConfig>
+    implements $ServerConfigCopyWith<$Res> {
   _$ServerConfigCopyWithImpl(this._value, this._then);
 
-  final ServerConfig _value;
   // ignore: unused_field
-  final $Res Function(ServerConfig) _then;
+  final $Val _value;
+  // ignore: unused_field
+  final $Res Function($Val) _then;
 
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? githubToken = freezed,
-    Object? sendgridToken = freezed,
-    Object? failureEmail = freezed,
+    Object? githubToken = null,
   }) {
     return _then(_value.copyWith(
-      githubToken: githubToken == freezed
+      githubToken: null == githubToken
           ? _value.githubToken
           : githubToken // ignore: cast_nullable_to_non_nullable
               as String,
-      sendgridToken: sendgridToken == freezed
-          ? _value.sendgridToken
-          : sendgridToken // ignore: cast_nullable_to_non_nullable
-              as String,
-      failureEmail: failureEmail == freezed
-          ? _value.failureEmail
-          : failureEmail // ignore: cast_nullable_to_non_nullable
-              as String,
-    ));
+    ) as $Val);
   }
 }
 
 /// @nodoc
-abstract class _$$_ServerConfigCopyWith<$Res>
+abstract class _$$ServerConfigImplCopyWith<$Res>
     implements $ServerConfigCopyWith<$Res> {
-  factory _$$_ServerConfigCopyWith(
-          _$_ServerConfig value, $Res Function(_$_ServerConfig) then) =
-      __$$_ServerConfigCopyWithImpl<$Res>;
+  factory _$$ServerConfigImplCopyWith(
+          _$ServerConfigImpl value, $Res Function(_$ServerConfigImpl) then) =
+      __$$ServerConfigImplCopyWithImpl<$Res>;
   @override
-  $Res call({String githubToken, String sendgridToken, String failureEmail});
+  @useResult
+  $Res call({String githubToken});
 }
 
 /// @nodoc
-class __$$_ServerConfigCopyWithImpl<$Res>
-    extends _$ServerConfigCopyWithImpl<$Res>
-    implements _$$_ServerConfigCopyWith<$Res> {
-  __$$_ServerConfigCopyWithImpl(
-      _$_ServerConfig _value, $Res Function(_$_ServerConfig) _then)
-      : super(_value, (v) => _then(v as _$_ServerConfig));
+class __$$ServerConfigImplCopyWithImpl<$Res>
+    extends _$ServerConfigCopyWithImpl<$Res, _$ServerConfigImpl>
+    implements _$$ServerConfigImplCopyWith<$Res> {
+  __$$ServerConfigImplCopyWithImpl(
+      _$ServerConfigImpl _value, $Res Function(_$ServerConfigImpl) _then)
+      : super(_value, _then);
 
-  @override
-  _$_ServerConfig get _value => super._value as _$_ServerConfig;
-
+  @pragma('vm:prefer-inline')
   @override
   $Res call({
-    Object? githubToken = freezed,
-    Object? sendgridToken = freezed,
-    Object? failureEmail = freezed,
+    Object? githubToken = null,
   }) {
-    return _then(_$_ServerConfig(
-      githubToken: githubToken == freezed
+    return _then(_$ServerConfigImpl(
+      githubToken: null == githubToken
           ? _value.githubToken
           : githubToken // ignore: cast_nullable_to_non_nullable
               as String,
-      sendgridToken: sendgridToken == freezed
-          ? _value.sendgridToken
-          : sendgridToken // ignore: cast_nullable_to_non_nullable
-              as String,
-      failureEmail: failureEmail == freezed
-          ? _value.failureEmail
-          : failureEmail // ignore: cast_nullable_to_non_nullable
-              as String,
     ));
   }
 }
 
 /// @nodoc
 @JsonSerializable()
-class _$_ServerConfig implements _ServerConfig {
-  _$_ServerConfig(
-      {required this.githubToken,
-      required this.sendgridToken,
-      required this.failureEmail});
+class _$ServerConfigImpl implements _ServerConfig {
+  _$ServerConfigImpl({required this.githubToken});
 
-  factory _$_ServerConfig.fromJson(Map<String, dynamic> json) =>
-      _$$_ServerConfigFromJson(json);
+  factory _$ServerConfigImpl.fromJson(Map<String, dynamic> json) =>
+      _$$ServerConfigImplFromJson(json);
 
   @override
   final String githubToken;
-  @override
-  final String sendgridToken;
-  @override
-  final String failureEmail;
 
   @override
   String toString() {
-    return 'ServerConfig(githubToken: $githubToken, sendgridToken: $sendgridToken, failureEmail: $failureEmail)';
+    return 'ServerConfig(githubToken: $githubToken)';
   }
 
   @override
-  bool operator ==(dynamic other) {
+  bool operator ==(Object other) {
     return identical(this, other) ||
         (other.runtimeType == runtimeType &&
-            other is _$_ServerConfig &&
-            const DeepCollectionEquality()
-                .equals(other.githubToken, githubToken) &&
-            const DeepCollectionEquality()
-                .equals(other.sendgridToken, sendgridToken) &&
-            const DeepCollectionEquality()
-                .equals(other.failureEmail, failureEmail));
+            other is _$ServerConfigImpl &&
+            (identical(other.githubToken, githubToken) ||
+                other.githubToken == githubToken));
   }
 
   @JsonKey(ignore: true)
   @override
-  int get hashCode => Object.hash(
-      runtimeType,
-      const DeepCollectionEquality().hash(githubToken),
-      const DeepCollectionEquality().hash(sendgridToken),
-      const DeepCollectionEquality().hash(failureEmail));
+  int get hashCode => Object.hash(runtimeType, githubToken);
 
   @JsonKey(ignore: true)
   @override
-  _$$_ServerConfigCopyWith<_$_ServerConfig> get copyWith =>
-      __$$_ServerConfigCopyWithImpl<_$_ServerConfig>(this, _$identity);
+  @pragma('vm:prefer-inline')
+  _$$ServerConfigImplCopyWith<_$ServerConfigImpl> get copyWith =>
+      __$$ServerConfigImplCopyWithImpl<_$ServerConfigImpl>(this, _$identity);
 
   @override
   Map<String, dynamic> toJson() {
-    return _$$_ServerConfigToJson(
+    return _$$ServerConfigImplToJson(
       this,
     );
   }
 }
 
 abstract class _ServerConfig implements ServerConfig {
-  factory _ServerConfig(
-      {required final String githubToken,
-      required final String sendgridToken,
-      required final String failureEmail}) = _$_ServerConfig;
+  factory _ServerConfig({required final String githubToken}) =
+      _$ServerConfigImpl;
 
   factory _ServerConfig.fromJson(Map<String, dynamic> json) =
-      _$_ServerConfig.fromJson;
+      _$ServerConfigImpl.fromJson;
 
   @override
   String get githubToken;
   @override
-  String get sendgridToken;
-  @override
-  String get failureEmail;
-  @override
   @JsonKey(ignore: true)
-  _$$_ServerConfigCopyWith<_$_ServerConfig> get copyWith =>
+  _$$ServerConfigImplCopyWith<_$ServerConfigImpl> get copyWith =>
       throw _privateConstructorUsedError;
 }
diff --git a/github-label-notifier/symbolizer/lib/model.g.dart b/github-label-notifier/symbolizer/lib/model.g.dart
index bb1e749..33f04cd 100644
--- a/github-label-notifier/symbolizer/lib/model.g.dart
+++ b/github-label-notifier/symbolizer/lib/model.g.dart
@@ -1,39 +1,39 @@
 // GENERATED CODE - DO NOT MODIFY BY HAND
 
-part of symbolizer.model;
+part of 'model.dart';
 
 // **************************************************************************
 // JsonSerializableGenerator
 // **************************************************************************
 
-_$_EngineVariant _$$_EngineVariantFromJson(Map<String, dynamic> json) =>
-    _$_EngineVariant(
+_$EngineVariantImpl _$$EngineVariantImplFromJson(Map<String, dynamic> json) =>
+    _$EngineVariantImpl(
       os: json['os'] as String,
       arch: json['arch'] as String?,
       mode: json['mode'] as String?,
     );
 
-Map<String, dynamic> _$$_EngineVariantToJson(_$_EngineVariant instance) =>
+Map<String, dynamic> _$$EngineVariantImplToJson(_$EngineVariantImpl instance) =>
     <String, dynamic>{
       'os': instance.os,
       'arch': instance.arch,
       'mode': instance.mode,
     };
 
-_$_EngineBuild _$$_EngineBuildFromJson(Map<String, dynamic> json) =>
-    _$_EngineBuild(
+_$EngineBuildImpl _$$EngineBuildImplFromJson(Map<String, dynamic> json) =>
+    _$EngineBuildImpl(
       engineHash: json['engineHash'] as String,
       variant: EngineVariant.fromJson(json['variant'] as Map<String, dynamic>),
     );
 
-Map<String, dynamic> _$$_EngineBuildToJson(_$_EngineBuild instance) =>
+Map<String, dynamic> _$$EngineBuildImplToJson(_$EngineBuildImpl instance) =>
     <String, dynamic>{
       'engineHash': instance.engineHash,
       'variant': instance.variant,
     };
 
-_$IosCrashFrame _$$IosCrashFrameFromJson(Map<String, dynamic> json) =>
-    _$IosCrashFrame(
+_$IosCrashFrameImpl _$$IosCrashFrameImplFromJson(Map<String, dynamic> json) =>
+    _$IosCrashFrameImpl(
       no: json['no'] as String,
       binary: json['binary'] as String,
       pc: json['pc'] as int,
@@ -43,7 +43,7 @@
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$IosCrashFrameToJson(_$IosCrashFrame instance) =>
+Map<String, dynamic> _$$IosCrashFrameImplToJson(_$IosCrashFrameImpl instance) =>
     <String, dynamic>{
       'no': instance.no,
       'binary': instance.binary,
@@ -54,8 +54,9 @@
       'runtimeType': instance.$type,
     };
 
-_$AndroidCrashFrame _$$AndroidCrashFrameFromJson(Map<String, dynamic> json) =>
-    _$AndroidCrashFrame(
+_$AndroidCrashFrameImpl _$$AndroidCrashFrameImplFromJson(
+        Map<String, dynamic> json) =>
+    _$AndroidCrashFrameImpl(
       no: json['no'] as String,
       pc: json['pc'] as int,
       binary: json['binary'] as String,
@@ -64,7 +65,8 @@
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$AndroidCrashFrameToJson(_$AndroidCrashFrame instance) =>
+Map<String, dynamic> _$$AndroidCrashFrameImplToJson(
+        _$AndroidCrashFrameImpl instance) =>
     <String, dynamic>{
       'no': instance.no,
       'pc': instance.pc,
@@ -74,8 +76,9 @@
       'runtimeType': instance.$type,
     };
 
-_$CustomCrashFrame _$$CustomCrashFrameFromJson(Map<String, dynamic> json) =>
-    _$CustomCrashFrame(
+_$CustomCrashFrameImpl _$$CustomCrashFrameImplFromJson(
+        Map<String, dynamic> json) =>
+    _$CustomCrashFrameImpl(
       no: json['no'] as String,
       pc: json['pc'] as int,
       binary: json['binary'] as String,
@@ -85,7 +88,8 @@
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$CustomCrashFrameToJson(_$CustomCrashFrame instance) =>
+Map<String, dynamic> _$$CustomCrashFrameImplToJson(
+        _$CustomCrashFrameImpl instance) =>
     <String, dynamic>{
       'no': instance.no,
       'pc': instance.pc,
@@ -96,15 +100,17 @@
       'runtimeType': instance.$type,
     };
 
-_$DartvmCrashFrame _$$DartvmCrashFrameFromJson(Map<String, dynamic> json) =>
-    _$DartvmCrashFrame(
+_$DartvmCrashFrameImpl _$$DartvmCrashFrameImplFromJson(
+        Map<String, dynamic> json) =>
+    _$DartvmCrashFrameImpl(
       pc: json['pc'] as int,
       binary: json['binary'] as String,
       offset: json['offset'] as int,
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$DartvmCrashFrameToJson(_$DartvmCrashFrame instance) =>
+Map<String, dynamic> _$$DartvmCrashFrameImplToJson(
+        _$DartvmCrashFrameImpl instance) =>
     <String, dynamic>{
       'pc': instance.pc,
       'binary': instance.binary,
@@ -112,7 +118,7 @@
       'runtimeType': instance.$type,
     };
 
-_$_Crash _$$_CrashFromJson(Map<String, dynamic> json) => _$_Crash(
+_$CrashImpl _$$CrashImplFromJson(Map<String, dynamic> json) => _$CrashImpl(
       engineVariant:
           EngineVariant.fromJson(json['engineVariant'] as Map<String, dynamic>),
       frames: (json['frames'] as List<dynamic>)
@@ -122,16 +128,17 @@
       androidMajorVersion: json['androidMajorVersion'] as int?,
     );
 
-Map<String, dynamic> _$$_CrashToJson(_$_Crash instance) => <String, dynamic>{
+Map<String, dynamic> _$$CrashImplToJson(_$CrashImpl instance) =>
+    <String, dynamic>{
       'engineVariant': instance.engineVariant,
       'frames': instance.frames,
       'format': instance.format,
       'androidMajorVersion': instance.androidMajorVersion,
     };
 
-_$SymbolizationResultOk _$$SymbolizationResultOkFromJson(
+_$SymbolizationResultOkImpl _$$SymbolizationResultOkImplFromJson(
         Map<String, dynamic> json) =>
-    _$SymbolizationResultOk(
+    _$SymbolizationResultOkImpl(
       results: (json['results'] as List<dynamic>)
           .map((e) =>
               CrashSymbolizationResult.fromJson(e as Map<String, dynamic>))
@@ -139,30 +146,30 @@
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$SymbolizationResultOkToJson(
-        _$SymbolizationResultOk instance) =>
+Map<String, dynamic> _$$SymbolizationResultOkImplToJson(
+        _$SymbolizationResultOkImpl instance) =>
     <String, dynamic>{
       'results': instance.results.map((e) => e.toJson()).toList(),
       'runtimeType': instance.$type,
     };
 
-_$SymbolizationResultError _$$SymbolizationResultErrorFromJson(
+_$SymbolizationResultErrorImpl _$$SymbolizationResultErrorImplFromJson(
         Map<String, dynamic> json) =>
-    _$SymbolizationResultError(
+    _$SymbolizationResultErrorImpl(
       error: SymbolizationNote.fromJson(json['error'] as Map<String, dynamic>),
       $type: json['runtimeType'] as String?,
     );
 
-Map<String, dynamic> _$$SymbolizationResultErrorToJson(
-        _$SymbolizationResultError instance) =>
+Map<String, dynamic> _$$SymbolizationResultErrorImplToJson(
+        _$SymbolizationResultErrorImpl instance) =>
     <String, dynamic>{
       'error': instance.error.toJson(),
       'runtimeType': instance.$type,
     };
 
-_$_CrashSymbolizationResult _$$_CrashSymbolizationResultFromJson(
+_$CrashSymbolizationResultImpl _$$CrashSymbolizationResultImplFromJson(
         Map<String, dynamic> json) =>
-    _$_CrashSymbolizationResult(
+    _$CrashSymbolizationResultImpl(
       crash: Crash.fromJson(json['crash'] as Map<String, dynamic>),
       engineBuild: json['engineBuild'] == null
           ? null
@@ -175,8 +182,8 @@
           const [],
     );
 
-Map<String, dynamic> _$$_CrashSymbolizationResultToJson(
-        _$_CrashSymbolizationResult instance) =>
+Map<String, dynamic> _$$CrashSymbolizationResultImplToJson(
+        _$CrashSymbolizationResultImpl instance) =>
     <String, dynamic>{
       'crash': instance.crash.toJson(),
       'engineBuild': instance.engineBuild?.toJson(),
@@ -184,14 +191,15 @@
       'notes': instance.notes.map((e) => e.toJson()).toList(),
     };
 
-_$_SymbolizationNote _$$_SymbolizationNoteFromJson(Map<String, dynamic> json) =>
-    _$_SymbolizationNote(
+_$SymbolizationNoteImpl _$$SymbolizationNoteImplFromJson(
+        Map<String, dynamic> json) =>
+    _$SymbolizationNoteImpl(
       kind: $enumDecode(_$SymbolizationNoteKindEnumMap, json['kind']),
       message: json['message'] as String?,
     );
 
-Map<String, dynamic> _$$_SymbolizationNoteToJson(
-        _$_SymbolizationNote instance) =>
+Map<String, dynamic> _$$SymbolizationNoteImplToJson(
+        _$SymbolizationNoteImpl instance) =>
     <String, dynamic>{
       'kind': _$SymbolizationNoteKindEnumMap[instance.kind]!,
       'message': instance.message,
@@ -213,16 +221,12 @@
   SymbolizationNoteKind.exceptionWhileParsing: 'exceptionWhileParsing',
 };
 
-_$_ServerConfig _$$_ServerConfigFromJson(Map<String, dynamic> json) =>
-    _$_ServerConfig(
+_$ServerConfigImpl _$$ServerConfigImplFromJson(Map<String, dynamic> json) =>
+    _$ServerConfigImpl(
       githubToken: json['githubToken'] as String,
-      sendgridToken: json['sendgridToken'] as String,
-      failureEmail: json['failureEmail'] as String,
     );
 
-Map<String, dynamic> _$$_ServerConfigToJson(_$_ServerConfig instance) =>
+Map<String, dynamic> _$$ServerConfigImplToJson(_$ServerConfigImpl instance) =>
     <String, dynamic>{
       'githubToken': instance.githubToken,
-      'sendgridToken': instance.sendgridToken,
-      'failureEmail': instance.failureEmail,
     };
diff --git a/github-label-notifier/symbolizer/lib/ndk.dart b/github-label-notifier/symbolizer/lib/ndk.dart
index bbc3671..cd92d7a 100644
--- a/github-label-notifier/symbolizer/lib/ndk.dart
+++ b/github-label-notifier/symbolizer/lib/ndk.dart
@@ -8,13 +8,21 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:collection/collection.dart';
+import 'package:logging/logging.dart';
 import 'package:path/path.dart' as p;
 
+final _log = Logger('tools');
+
 class Ndk {
+  final LlvmTools llvmTools;
+
+  Ndk({required this.llvmTools});
+
   /// Return information about .text section from the given [object] file.
   Future<SectionInfo> getTextSectionInfo(String object) async {
     final result =
-        await _run(_readelfBinary, ['--elf-output-style=GNU', '-l', object]);
+        await _run(llvmTools.readobj, ['--elf-output-style=GNU', '-l', object]);
     for (var match in _loadCommandPattern.allMatches(result)) {
       if (match.namedGroup('flags')!.trim() == 'R E') {
         // Found .text section
@@ -31,7 +39,7 @@
   /// Return build-id of the given [object] file.
   Future<String> getBuildId(String object) async {
     final result =
-        await _run(_readelfBinary, ['--elf-output-style=GNU', '-n', object]);
+        await _run(llvmTools.readobj, ['--elf-output-style=GNU', '-n', object]);
     final match = _buildIdPattern.firstMatch(result);
     if (match == null) {
       throw 'Failed to extract build-id from $object';
@@ -45,7 +53,7 @@
       {required String object,
       required List<String> addresses,
       String? arch}) async {
-    final result = await _run(_llvmSymbolizerBinary, [
+    final result = await _run(llvmTools.symbolizer, [
       if (arch != null) '--default-arch=$arch',
       '--obj',
       object,
@@ -69,7 +77,7 @@
     required String arch,
   }) async* {
     final process =
-        await Process.start(_llvmObjdumpBinary, ['--arch=$arch', '-d', object]);
+        await Process.start(llvmTools.objdump, ['--arch=$arch', '-d', object]);
 
     await for (var line in process.stdout
         .transform(utf8.decoder)
@@ -102,14 +110,81 @@
   });
 }
 
-final _platform = Platform.isLinux ? 'linux' : 'darwin';
-final _ndkDir = 'tools/android-ndk';
-final _llvmSymbolizerBinary =
-    '$_ndkDir/toolchains/llvm/prebuilt/$_platform-x86_64/bin/llvm-symbolizer';
-final _llvmObjdumpBinary =
-    '$_ndkDir/toolchains/llvm/prebuilt/$_platform-x86_64/bin/llvm-objdump';
-final _readelfBinary =
-    '$_ndkDir/toolchains/llvm/prebuilt/$_platform-x86_64/bin/llvm-readobj';
+class LlvmTools {
+  final String symbolizer;
+  final String objdump;
+  final String readobj;
+
+  LlvmTools._({
+    required this.symbolizer,
+    required this.readobj,
+    required this.objdump,
+  });
+
+  @override
+  String toString() => 'LlvmTools($symbolizer, $objdump, $readobj)';
+
+  static LlvmTools? _at(String root) {
+    _log.info(
+        'checking for llvm-{symbolizer,readobj,objdump} in ${root.isEmpty ? '\$PATH' : root}');
+    final tools = LlvmTools._(
+        symbolizer: p.join(root, 'llvm-symbolizer'),
+        readobj: p.join(root, 'llvm-readobj'),
+        objdump: p.join(root, 'llvm-objdump'));
+    return tools._checkOperational() ? tools : null;
+  }
+
+  bool _checkOperational() {
+    bool checkBinary(String path) {
+      try {
+        final result = Process.runSync(path, ['--help']);
+        return result.exitCode == 0 && result.stdout.startsWith('OVERVIEW: ');
+      } catch (_) {
+        return false;
+      }
+    }
+
+    return checkBinary(symbolizer) &&
+        checkBinary(objdump) &&
+        checkBinary(readobj);
+  }
+
+  static LlvmTools? findTools() {
+    final homeDir = Platform.environment['HOME'] ?? '';
+    return LlvmTools._at('') ??
+        _ndkTools('tools/android-ndk') ??
+        _tryFindNdkAt(p.join(homeDir, 'Library/Android/sdk/ndk')) ??
+        _tryFindNdkAt(p.join(homeDir, 'Android/Sdk/ndk'));
+  }
+
+  static LlvmTools? _tryFindNdkAt(String path) {
+    try {
+      final ndksDir = Directory(path);
+      int majorVersion(String v) {
+        return int.tryParse(v.split('.').first) ?? 0;
+      }
+
+      final ndkVersions = [
+        for (var entry in ndksDir.listSync())
+          if (entry is Directory) p.basename(entry.path),
+      ]..sort((a, b) => majorVersion(b).compareTo(majorVersion(a)));
+
+      return ndkVersions
+          .map((name) => _ndkTools(p.join(path, name)))
+          .whereType<LlvmTools>()
+          .firstOrNull;
+    } catch (_) {
+      return null;
+    }
+  }
+
+  static LlvmTools? _ndkTools(String path) {
+    final platform = Platform.isLinux ? 'linux' : 'darwin';
+    return LlvmTools._at(
+        '$path/toolchains/llvm/prebuilt/$platform-x86_64/bin/');
+  }
+}
+
 final _buildIdPattern = RegExp(r'Build ID:\s+(?<id>[0-9a-f]+)');
 final _loadCommandPattern = RegExp(
     r'^\s+LOAD\s+(?<offset>0x[0-9a-f]+)\s+(?<vma>0x[0-9a-f]+)\s+(?<phys>0x[0-9a-f]+)\s+(?<filesz>0x[0-9a-f]+)\s+(?<memsz>0x[0-9a-f]+)\s+(?<flags>[^0]+)\s+0x[0-9a-f]+\s*$',
diff --git a/github-label-notifier/symbolizer/lib/server.dart b/github-label-notifier/symbolizer/lib/server.dart
deleted file mode 100644
index 47822d1..0000000
--- a/github-label-notifier/symbolizer/lib/server.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2020, 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.
-
-/// HTTP API for [symbolizer.bot] and [symbolizer.symbolizer] functionality.
-library symbolizer.server;
-
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:github/github.dart';
-import 'package:github/hooks.dart';
-import 'package:logging/logging.dart';
-import 'package:pedantic/pedantic.dart';
-
-import 'package:symbolizer/bot.dart';
-import 'package:symbolizer/symbolizer.dart';
-
-final _log = Logger('server');
-
-typedef _RequestHandler = Future<Object> Function(Map<String, dynamic> request);
-
-Future<void> serve(Object address, int port,
-    {required Symbolizer symbolizer, required Bot bot}) async {
-  final handlers = <String, _RequestHandler>{
-    '/symbolize': (issue) => symbolizer.symbolize(issue['body']),
-    '/command': (event) async {
-      final repoOrgMember = const {'MEMBER', 'OWNER'}
-          .contains(event['comment']['author_association']);
-      final commentEvent = IssueCommentEvent.fromJson(event);
-      final repo = RepositorySlug.full(event['repository']['full_name']);
-      await bot.executeCommand(repo, commentEvent.issue!, commentEvent.comment!,
-          authorized: repoOrgMember);
-      return {'status': 'ok'};
-    },
-  };
-
-  // Start the server.
-  final server = await HttpServer.bind(address, port);
-  _log.info('Listening on ${server.address}:${server.port}');
-
-  // Intentionally not processing requests in parallel to avoid racing
-  // in symbol cache.
-  await for (HttpRequest request in server) {
-    _log.info('Incoming request: ${request.method} ${request.requestedUri}');
-    final handler = handlers[request.requestedUri.path];
-    if (request.method != 'POST' || handler == null) {
-      request.response
-        ..statusCode = 404
-        ..write('Not found');
-      unawaited(request.response.close());
-      continue;
-    }
-    try {
-      final requestObj =
-          await utf8.decoder.bind(request).transform(json.decoder).first;
-      final responseJson =
-          jsonEncode(await handler(requestObj as Map<String, dynamic>));
-      request.response
-        ..statusCode = HttpStatus.ok
-        ..headers.add(HttpHeaders.contentTypeHeader, 'application/json')
-        ..write(responseJson);
-    } catch (e, st) {
-      request.response
-        ..statusCode = HttpStatus.internalServerError
-        ..headers.add(HttpHeaders.contentTypeHeader, 'application/json')
-        ..write(jsonEncode({
-          'status': 'error',
-          'message': e.toString(),
-          'stacktrace': st.toString(),
-        }));
-    }
-    unawaited(request.response.close());
-  }
-}
diff --git a/github-label-notifier/symbolizer/lib/symbolizer.dart b/github-label-notifier/symbolizer/lib/symbolizer.dart
index 5c30daa..ffdaaf4 100644
--- a/github-label-notifier/symbolizer/lib/symbolizer.dart
+++ b/github-label-notifier/symbolizer/lib/symbolizer.dart
@@ -173,7 +173,7 @@
       } catch (e) {
         return _failedToSymbolize(
             crash, SymbolizationNoteKind.exceptionWhileLookingByBuildId,
-            error: '($buildId) $e');
+            error: 'build-id: $buildId\n$e');
       }
     }
 
diff --git a/github-label-notifier/symbolizer/lib/symbols.dart b/github-label-notifier/symbolizer/lib/symbols.dart
index 72c08ab..fd4875c 100644
--- a/github-label-notifier/symbolizer/lib/symbols.dart
+++ b/github-label-notifier/symbolizer/lib/symbols.dart
@@ -123,7 +123,7 @@
         return engineBuild;
       }
     }
-    throw 'Failed to find build with matching buildId ($buildId)';
+    throw 'Failed to find build with matching buildId';
   }
 
   File get _cacheStateFile => File(p.join(_path, 'cache.json'));
@@ -162,7 +162,7 @@
   }
 
   String _cacheDirectoryFor(EngineBuild build, {String suffix = ''}) =>
-      'symbols-cache/${build.engineHash}-${build.variant.toArtifactPath()}'
+      '$_path/${build.engineHash}-${build.variant.toArtifactPath()}'
       '${suffix.isNotEmpty ? '-' : ''}$suffix';
 
   Future<String> _getImpl(String targetDir, EngineBuild build,
diff --git a/github-label-notifier/symbolizer/pubspec.yaml b/github-label-notifier/symbolizer/pubspec.yaml
index 92e5c05..b52d9ae 100644
--- a/github-label-notifier/symbolizer/pubspec.yaml
+++ b/github-label-notifier/symbolizer/pubspec.yaml
@@ -7,26 +7,27 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.17.0 <4.0.0'
+  sdk: '>=3.0.0 <4.0.0'
+
+executables:
+  symbolize:
 
 dependencies:
-  args: ^2.3.1
-  corsac_jwt: ^1.0.0-nullsafety.1
-  freezed_annotation: ^2.1.0
-  github: ^9.4.0
-  http: ^0.13.5
-  json_annotation: ^4.6.0
-  logging: ^1.0.2
-  meta: ^1.8.0
-  path: ^1.8.2
-  pedantic: ^1.11.1
-  sendgrid_mailer: ^0.1.3
-  collection: ^1.15.0-nullsafety.4
+  args: ^2.4.2
+  freezed_annotation: ^2.4.1
+  github: ^9.24.0
+  http: ^1.2.1
+  json_annotation: ^4.8.1
+  logging: ^1.2.0
+  meta: ^1.12.0
+  path: ^1.9.0
+  collection: ^1.18.0
+  ansicolor: ^2.0.2
 
 dev_dependencies:
-  build_runner: ^2.2.0
-  freezed: ^2.1.0+1
-  json_serializable: ^6.3.1
-  lints: ^2.0.0
-  mockito: ^5.3.0
-  test: ^1.21.4
+  build_runner: ^2.4.8
+  freezed: ^2.4.7
+  json_serializable: ^6.7.1
+  lints: ^3.0.0
+  mockito: ^5.4.0
+  test: ^1.25.2
diff --git a/github-label-notifier/symbolizer/test/bot_test.dart b/github-label-notifier/symbolizer/test/bot_test.dart
deleted file mode 100644
index c467348..0000000
--- a/github-label-notifier/symbolizer/test/bot_test.dart
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:github/github.dart';
-import 'package:mockito/annotations.dart';
-import 'package:mockito/mockito.dart';
-import 'package:path/path.dart' as p;
-import 'package:symbolizer/bot.dart';
-import 'package:symbolizer/config.dart';
-import 'package:symbolizer/model.dart';
-import 'package:symbolizer/ndk.dart';
-import 'package:symbolizer/symbols.dart';
-import 'package:test/test.dart';
-
-import 'package:symbolizer/symbolizer.dart';
-
-@GenerateNiceMocks([
-  MockSpec<GitHub>(),
-  MockSpec<IssuesService>(),
-])
-import 'bot_test.mocks.dart';
-
-class SymbolsCacheProxy implements SymbolsCache {
-  final SymbolsCache impl;
-  final bool shouldThrow;
-  SymbolsCacheProxy(this.impl, {this.shouldThrow = false});
-
-  @override
-  Future<EngineBuild> findVariantByBuildId(
-      {required String engineHash,
-      required EngineVariant variant,
-      String? buildId}) {
-    return impl.findVariantByBuildId(
-        engineHash: engineHash, variant: variant, buildId: buildId);
-  }
-
-  @override
-  Future<String> get(EngineBuild build) {
-    if (shouldThrow) {
-      throw 'Failed to download $build';
-    }
-    return impl.get(build);
-  }
-
-  @override
-  Future<String> getEngineBinary(EngineBuild build) =>
-      impl.getEngineBinary(build);
-}
-
-final regenerateExpectations =
-    bool.fromEnvironment('REGENERATE_EXPECTATIONS') ||
-        Platform.environment['REGENERATE_EXPECTATIONS'] == 'true';
-
-final config = loadConfigFromFile();
-
-void main() {
-  group('command parsing', () {
-    test('nothing to do', () {
-      expect(Bot.parseCommand(0, 'x64'), isNull);
-      expect(Bot.parseCommand(0, 'x64 debug'), isNull);
-      expect(Bot.parseCommand(0, 'x64\n@flutter-symbolizer-bot'), isNull);
-    });
-    test('simple', () {
-      expect(
-          Bot.parseCommand(0, '@flutter-symbolizer-bot'),
-          equals(BotCommand(
-            overrides: SymbolizationOverrides(),
-            symbolizeThis: false,
-            worklist: <String>{},
-          )));
-    });
-    test('with arch', () {
-      for (var arch in ['arm', 'arm64', 'x86', 'x64']) {
-        expect(
-            Bot.parseCommand(0, '@flutter-symbolizer-bot $arch'),
-            equals(BotCommand(
-              overrides: SymbolizationOverrides(arch: arch),
-              symbolizeThis: false,
-              worklist: <String>{},
-            )));
-      }
-    });
-    test('with mode', () {
-      for (var mode in ['profile', 'release', 'debug']) {
-        expect(
-            Bot.parseCommand(0, '@flutter-symbolizer-bot $mode'),
-            equals(BotCommand(
-              overrides: SymbolizationOverrides(mode: mode),
-              symbolizeThis: false,
-              worklist: <String>{},
-            )));
-      }
-    });
-    test('with engine hash', () {
-      expect(
-          Bot.parseCommand(
-              0, '@flutter-symbolizer-bot arm64 engine#aaabbb debug'),
-          equals(BotCommand(
-            overrides: SymbolizationOverrides(
-                arch: 'arm64', engineHash: 'aaabbb', mode: 'debug'),
-            symbolizeThis: false,
-            worklist: <String>{},
-          )));
-    });
-    test('with links', () {
-      expect(
-          Bot.parseCommand(
-              0,
-              '@flutter-symbolizer-bot '
-              'https://github.com/flutter/flutter/issues/0#issue-1 '
-              'engine#aaabbb '
-              'https://github.com/flutter/flutter/issues/0#issuecomment-2'),
-          equals(BotCommand(
-            overrides: SymbolizationOverrides(engineHash: 'aaabbb'),
-            symbolizeThis: false,
-            worklist: <String>{'issue-1', 'issuecomment-2'},
-          )));
-    });
-  });
-
-  group('end-to-end', () {
-    late SymbolsCache symbols;
-    late Ndk ndk;
-    late GitHub github;
-    final files = Directory('test/data').listSync();
-
-    setUpAll(() {
-      ndk = Ndk();
-      symbols = SymbolsCache(path: 'symbols-cache', ndk: ndk);
-      github = GitHub(auth: Authentication.withToken(config.githubToken));
-    });
-
-    for (var inputFile in files
-        .where((f) => p.basename(f.path).endsWith('.input.txt'))
-        .cast<File>()) {
-      final testName = p.basename(inputFile.path).split('.').first;
-      final expectationFile = File('test/data/$testName.expected.github.txt');
-      test(testName, () async {
-        final input = await inputFile.readAsString();
-
-        final authorized = !input.contains('/unauthorized');
-        final shouldThrow = input.contains('/throw');
-
-        final symbolsProxy =
-            SymbolsCacheProxy(symbols, shouldThrow: shouldThrow);
-
-        final symbolizer =
-            Symbolizer(symbols: symbolsProxy, ndk: ndk, github: github);
-
-        final mockGitHub = MockGitHub();
-        final mockIssues = MockIssuesService();
-        final repo = RepositorySlug('flutter', 'flutter');
-        final bot = Bot(
-          github: mockGitHub,
-          symbolizer: symbolizer,
-          failuresEmail: null,
-          mailer: null,
-        );
-
-        final command = Bot.isCommand(input)
-            ? Bot.parseCommand(0, input)!.symbolizeThis
-                ? input
-                : input.split('\n').first
-            : Bot.accountMention;
-
-        final somebody = User(login: 'somebody');
-        final commandComment = IssueComment(
-            id: 1001,
-            body: command,
-            user: somebody,
-            htmlUrl:
-                'https://github.com/flutter/flutter/issues/12345#issuecomment-1001');
-
-        when(mockGitHub.issues).thenReturn(mockIssues);
-
-        when(mockIssues.listCommentsByIssue(repo, 42))
-            .thenAnswer((realInvocation) async* {
-          yield IssueComment(
-              id: 1002,
-              body: 'something',
-              user: somebody,
-              htmlUrl:
-                  'https://github.com/flutter/flutter/issues/12345#issuecomment-1002');
-          yield IssueComment(
-              id: 1042,
-              body: input,
-              user: somebody,
-              htmlUrl:
-                  'https://github.com/flutter/flutter/issues/12345#issuecomment-1042');
-          yield commandComment;
-        });
-
-        when(mockIssues.createComment(repo, 42, any))
-            .thenAnswer((realInvocation) async {
-          return IssueComment();
-        });
-
-        throwOnMissingStub(mockGitHub);
-        throwOnMissingStub(mockIssues);
-        await bot.executeCommand(
-          repo,
-          Issue(id: 1000, body: 'something', number: 42),
-          commandComment,
-          authorized: authorized,
-        );
-
-        final result = verify(mockIssues.createComment(repo, 42, captureAny))
-            .captured
-            .single;
-
-        if (regenerateExpectations) {
-          await expectationFile.writeAsString(result);
-        } else {
-          final expected = await expectationFile.readAsString();
-
-          expect(result, equals(expected));
-        }
-      });
-    }
-
-    tearDownAll(() {
-      github.dispose();
-    });
-  });
-}
diff --git a/github-label-notifier/symbolizer/test/bot_test.mocks.dart b/github-label-notifier/symbolizer/test/bot_test.mocks.dart
deleted file mode 100644
index fc29c3c..0000000
--- a/github-label-notifier/symbolizer/test/bot_test.mocks.dart
+++ /dev/null
@@ -1,715 +0,0 @@
-// Mocks generated by Mockito 5.3.0 from annotations
-// in symbolizer/test/bot_test.dart.
-// Do not manually edit this file.
-
-// ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i4;
-
-import 'package:github/src/common.dart' as _i3;
-import 'package:http/http.dart' as _i2;
-import 'package:mockito/mockito.dart' as _i1;
-
-// ignore_for_file: type=lint
-// ignore_for_file: avoid_redundant_argument_values
-// ignore_for_file: avoid_setters_without_getters
-// ignore_for_file: comment_references
-// ignore_for_file: implementation_imports
-// ignore_for_file: invalid_use_of_visible_for_testing_member
-// ignore_for_file: prefer_const_constructors
-// ignore_for_file: unnecessary_parenthesis
-// ignore_for_file: camel_case_types
-// ignore_for_file: subtype_of_sealed_class
-
-class _FakeClient_0 extends _i1.SmartFake implements _i2.Client {
-  _FakeClient_0(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeActivityService_1 extends _i1.SmartFake
-    implements _i3.ActivityService {
-  _FakeActivityService_1(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeAuthorizationsService_2 extends _i1.SmartFake
-    implements _i3.AuthorizationsService {
-  _FakeAuthorizationsService_2(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeGistsService_3 extends _i1.SmartFake implements _i3.GistsService {
-  _FakeGistsService_3(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeGitService_4 extends _i1.SmartFake implements _i3.GitService {
-  _FakeGitService_4(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeIssuesService_5 extends _i1.SmartFake implements _i3.IssuesService {
-  _FakeIssuesService_5(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeMiscService_6 extends _i1.SmartFake implements _i3.MiscService {
-  _FakeMiscService_6(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeOrganizationsService_7 extends _i1.SmartFake
-    implements _i3.OrganizationsService {
-  _FakeOrganizationsService_7(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakePullRequestsService_8 extends _i1.SmartFake
-    implements _i3.PullRequestsService {
-  _FakePullRequestsService_8(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeRepositoriesService_9 extends _i1.SmartFake
-    implements _i3.RepositoriesService {
-  _FakeRepositoriesService_9(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeSearchService_10 extends _i1.SmartFake implements _i3.SearchService {
-  _FakeSearchService_10(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeUrlShortenerService_11 extends _i1.SmartFake
-    implements _i3.UrlShortenerService {
-  _FakeUrlShortenerService_11(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeUsersService_12 extends _i1.SmartFake implements _i3.UsersService {
-  _FakeUsersService_12(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeChecksService_13 extends _i1.SmartFake implements _i3.ChecksService {
-  _FakeChecksService_13(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeResponse_14 extends _i1.SmartFake implements _i2.Response {
-  _FakeResponse_14(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeGitHub_15 extends _i1.SmartFake implements _i3.GitHub {
-  _FakeGitHub_15(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeIssue_16 extends _i1.SmartFake implements _i3.Issue {
-  _FakeIssue_16(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeIssueComment_17 extends _i1.SmartFake implements _i3.IssueComment {
-  _FakeIssueComment_17(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeIssueLabel_18 extends _i1.SmartFake implements _i3.IssueLabel {
-  _FakeIssueLabel_18(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-class _FakeMilestone_19 extends _i1.SmartFake implements _i3.Milestone {
-  _FakeMilestone_19(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
-}
-
-/// A class which mocks [GitHub].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockGitHub extends _i1.Mock implements _i3.GitHub {
-  @override
-  set auth(_i3.Authentication? _auth) =>
-      super.noSuchMethod(Invocation.setter(#auth, _auth),
-          returnValueForMissingStub: null);
-  @override
-  String get endpoint => (super.noSuchMethod(Invocation.getter(#endpoint),
-      returnValue: '', returnValueForMissingStub: '') as String);
-  @override
-  _i2.Client get client => (super.noSuchMethod(Invocation.getter(#client),
-      returnValue: _FakeClient_0(this, Invocation.getter(#client)),
-      returnValueForMissingStub:
-          _FakeClient_0(this, Invocation.getter(#client))) as _i2.Client);
-  @override
-  _i3.ActivityService get activity => (super.noSuchMethod(
-      Invocation.getter(#activity),
-      returnValue: _FakeActivityService_1(this, Invocation.getter(#activity)),
-      returnValueForMissingStub: _FakeActivityService_1(
-          this, Invocation.getter(#activity))) as _i3.ActivityService);
-  @override
-  _i3.AuthorizationsService get authorizations =>
-      (super.noSuchMethod(Invocation.getter(#authorizations),
-              returnValue: _FakeAuthorizationsService_2(
-                  this, Invocation.getter(#authorizations)),
-              returnValueForMissingStub: _FakeAuthorizationsService_2(
-                  this, Invocation.getter(#authorizations)))
-          as _i3.AuthorizationsService);
-  @override
-  _i3.GistsService get gists => (super.noSuchMethod(Invocation.getter(#gists),
-          returnValue: _FakeGistsService_3(this, Invocation.getter(#gists)),
-          returnValueForMissingStub:
-              _FakeGistsService_3(this, Invocation.getter(#gists)))
-      as _i3.GistsService);
-  @override
-  _i3.GitService get git => (super.noSuchMethod(Invocation.getter(#git),
-      returnValue: _FakeGitService_4(this, Invocation.getter(#git)),
-      returnValueForMissingStub:
-          _FakeGitService_4(this, Invocation.getter(#git))) as _i3.GitService);
-  @override
-  _i3.IssuesService get issues => (super.noSuchMethod(
-          Invocation.getter(#issues),
-          returnValue: _FakeIssuesService_5(this, Invocation.getter(#issues)),
-          returnValueForMissingStub:
-              _FakeIssuesService_5(this, Invocation.getter(#issues)))
-      as _i3.IssuesService);
-  @override
-  _i3.MiscService get misc => (super.noSuchMethod(Invocation.getter(#misc),
-          returnValue: _FakeMiscService_6(this, Invocation.getter(#misc)),
-          returnValueForMissingStub:
-              _FakeMiscService_6(this, Invocation.getter(#misc)))
-      as _i3.MiscService);
-  @override
-  _i3.OrganizationsService get organizations => (super.noSuchMethod(
-      Invocation.getter(#organizations),
-      returnValue:
-          _FakeOrganizationsService_7(this, Invocation.getter(#organizations)),
-      returnValueForMissingStub: _FakeOrganizationsService_7(
-          this, Invocation.getter(#organizations))) as _i3
-      .OrganizationsService);
-  @override
-  _i3.PullRequestsService get pullRequests => (super.noSuchMethod(
-      Invocation.getter(#pullRequests),
-      returnValue:
-          _FakePullRequestsService_8(this, Invocation.getter(#pullRequests)),
-      returnValueForMissingStub: _FakePullRequestsService_8(
-          this, Invocation.getter(#pullRequests))) as _i3.PullRequestsService);
-  @override
-  _i3.RepositoriesService get repositories => (super.noSuchMethod(
-      Invocation.getter(#repositories),
-      returnValue:
-          _FakeRepositoriesService_9(this, Invocation.getter(#repositories)),
-      returnValueForMissingStub: _FakeRepositoriesService_9(
-          this, Invocation.getter(#repositories))) as _i3.RepositoriesService);
-  @override
-  _i3.SearchService get search => (super.noSuchMethod(
-          Invocation.getter(#search),
-          returnValue: _FakeSearchService_10(this, Invocation.getter(#search)),
-          returnValueForMissingStub:
-              _FakeSearchService_10(this, Invocation.getter(#search)))
-      as _i3.SearchService);
-  @override
-  _i3.UrlShortenerService get urlShortener => (super.noSuchMethod(
-      Invocation.getter(#urlShortener),
-      returnValue:
-          _FakeUrlShortenerService_11(this, Invocation.getter(#urlShortener)),
-      returnValueForMissingStub: _FakeUrlShortenerService_11(
-          this, Invocation.getter(#urlShortener))) as _i3.UrlShortenerService);
-  @override
-  _i3.UsersService get users => (super.noSuchMethod(Invocation.getter(#users),
-          returnValue: _FakeUsersService_12(this, Invocation.getter(#users)),
-          returnValueForMissingStub:
-              _FakeUsersService_12(this, Invocation.getter(#users)))
-      as _i3.UsersService);
-  @override
-  _i3.ChecksService get checks => (super.noSuchMethod(
-          Invocation.getter(#checks),
-          returnValue: _FakeChecksService_13(this, Invocation.getter(#checks)),
-          returnValueForMissingStub:
-              _FakeChecksService_13(this, Invocation.getter(#checks)))
-      as _i3.ChecksService);
-  @override
-  _i4.Future<T> getJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i2.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, String>? params,
-          _i3.JSONConverter<S, T>? convert,
-          String? preview}) =>
-      (super.noSuchMethod(
-              Invocation.method(#getJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #preview: preview
-              }),
-              returnValue: _i4.Future<T>.value(null),
-              returnValueForMissingStub: _i4.Future<T>.value(null))
-          as _i4.Future<T>);
-  @override
-  _i4.Future<T> postJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i2.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i3.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
-      (super.noSuchMethod(
-              Invocation.method(#postJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i4.Future<T>.value(null),
-              returnValueForMissingStub: _i4.Future<T>.value(null))
-          as _i4.Future<T>);
-  @override
-  _i4.Future<T> putJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i2.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i3.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
-      (super.noSuchMethod(
-              Invocation.method(#putJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i4.Future<T>.value(null),
-              returnValueForMissingStub: _i4.Future<T>.value(null))
-          as _i4.Future<T>);
-  @override
-  _i4.Future<T> patchJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i2.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i3.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
-      (super.noSuchMethod(
-              Invocation.method(#patchJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i4.Future<T>.value(null),
-              returnValueForMissingStub: _i4.Future<T>.value(null))
-          as _i4.Future<T>);
-  @override
-  _i4.Future<T> requestJson<S, T>(String? method, String? path,
-          {int? statusCode,
-          void Function(_i2.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i3.JSONConverter<S, T?>? convert,
-          dynamic body,
-          String? preview}) =>
-      (super.noSuchMethod(
-              Invocation.method(#requestJson, [
-                method,
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i4.Future<T>.value(null),
-              returnValueForMissingStub: _i4.Future<T>.value(null))
-          as _i4.Future<T>);
-  @override
-  _i4.Future<_i2.Response> request(String? method, String? path,
-          {Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          dynamic body,
-          int? statusCode,
-          void Function(_i2.Response)? fail,
-          String? preview}) =>
-      (super.noSuchMethod(
-          Invocation.method(#request, [
-            method,
-            path
-          ], {
-            #headers: headers,
-            #params: params,
-            #body: body,
-            #statusCode: statusCode,
-            #fail: fail,
-            #preview: preview
-          }),
-          returnValue: _i4.Future<_i2.Response>.value(_FakeResponse_14(
-              this,
-              Invocation.method(#request, [
-                method,
-                path
-              ], {
-                #headers: headers,
-                #params: params,
-                #body: body,
-                #statusCode: statusCode,
-                #fail: fail,
-                #preview: preview
-              }))),
-          returnValueForMissingStub:
-              _i4.Future<_i2.Response>.value(_FakeResponse_14(
-                  this,
-                  Invocation.method(#request, [
-                    method,
-                    path
-                  ], {
-                    #headers: headers,
-                    #params: params,
-                    #body: body,
-                    #statusCode: statusCode,
-                    #fail: fail,
-                    #preview: preview
-                  })))) as _i4.Future<_i2.Response>);
-  @override
-  void handleStatusCode(_i2.Response? response) =>
-      super.noSuchMethod(Invocation.method(#handleStatusCode, [response]),
-          returnValueForMissingStub: null);
-  @override
-  void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
-      returnValueForMissingStub: null);
-}
-
-/// A class which mocks [IssuesService].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockIssuesService extends _i1.Mock implements _i3.IssuesService {
-  @override
-  _i3.GitHub get github => (super.noSuchMethod(Invocation.getter(#github),
-      returnValue: _FakeGitHub_15(this, Invocation.getter(#github)),
-      returnValueForMissingStub:
-          _FakeGitHub_15(this, Invocation.getter(#github))) as _i3.GitHub);
-  @override
-  _i4.Stream<_i3.Issue> listAll(
-          {int? milestoneNumber,
-          String? state,
-          String? direction,
-          String? sort,
-          DateTime? since,
-          int? perPage,
-          List<String>? labels}) =>
-      (super.noSuchMethod(
-              Invocation.method(#listAll, [], {
-                #milestoneNumber: milestoneNumber,
-                #state: state,
-                #direction: direction,
-                #sort: sort,
-                #since: since,
-                #perPage: perPage,
-                #labels: labels
-              }),
-              returnValue: _i4.Stream<_i3.Issue>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Issue>.empty())
-          as _i4.Stream<_i3.Issue>);
-  @override
-  _i4.Stream<_i3.Issue> listByUser(
-          {int? milestoneNumber,
-          String? state,
-          String? direction,
-          String? sort,
-          DateTime? since,
-          int? perPage,
-          List<String>? labels}) =>
-      (super.noSuchMethod(
-              Invocation.method(#listByUser, [], {
-                #milestoneNumber: milestoneNumber,
-                #state: state,
-                #direction: direction,
-                #sort: sort,
-                #since: since,
-                #perPage: perPage,
-                #labels: labels
-              }),
-              returnValue: _i4.Stream<_i3.Issue>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Issue>.empty())
-          as _i4.Stream<_i3.Issue>);
-  @override
-  _i4.Stream<_i3.Issue> listByOrg(String? org,
-          {int? milestoneNumber,
-          String? state,
-          String? direction,
-          String? sort,
-          DateTime? since,
-          int? perPage,
-          List<String>? labels}) =>
-      (super.noSuchMethod(
-              Invocation.method(#listByOrg, [
-                org
-              ], {
-                #milestoneNumber: milestoneNumber,
-                #state: state,
-                #direction: direction,
-                #sort: sort,
-                #since: since,
-                #perPage: perPage,
-                #labels: labels
-              }),
-              returnValue: _i4.Stream<_i3.Issue>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Issue>.empty())
-          as _i4.Stream<_i3.Issue>);
-  @override
-  _i4.Stream<_i3.Issue> listByRepo(_i3.RepositorySlug? slug,
-          {int? milestoneNumber,
-          String? state,
-          String? direction,
-          String? sort,
-          DateTime? since,
-          int? perPage,
-          List<String>? labels}) =>
-      (super.noSuchMethod(
-              Invocation.method(#listByRepo, [
-                slug
-              ], {
-                #milestoneNumber: milestoneNumber,
-                #state: state,
-                #direction: direction,
-                #sort: sort,
-                #since: since,
-                #perPage: perPage,
-                #labels: labels
-              }),
-              returnValue: _i4.Stream<_i3.Issue>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Issue>.empty())
-          as _i4.Stream<_i3.Issue>);
-  @override
-  _i4.Stream<_i3.Reaction> listReactions(
-          _i3.RepositorySlug? slug, int? issueNumber,
-          {_i3.ReactionType? content}) =>
-      (super.noSuchMethod(
-              Invocation.method(
-                  #listReactions, [slug, issueNumber], {#content: content}),
-              returnValue: _i4.Stream<_i3.Reaction>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Reaction>.empty())
-          as _i4.Stream<_i3.Reaction>);
-  @override
-  _i4.Future<_i3.Issue> edit(_i3.RepositorySlug? slug, int? issueNumber,
-          _i3.IssueRequest? issue) =>
-      (super.noSuchMethod(Invocation.method(#edit, [slug, issueNumber, issue]),
-          returnValue: _i4.Future<_i3.Issue>.value(_FakeIssue_16(
-              this, Invocation.method(#edit, [slug, issueNumber, issue]))),
-          returnValueForMissingStub: _i4.Future<_i3.Issue>.value(_FakeIssue_16(
-              this, Invocation.method(#edit, [slug, issueNumber, issue])))) as _i4
-          .Future<_i3.Issue>);
-  @override
-  _i4.Future<_i3.Issue> get(_i3.RepositorySlug? slug, int? issueNumber) =>
-      (super.noSuchMethod(Invocation.method(#get, [slug, issueNumber]),
-          returnValue: _i4.Future<_i3.Issue>.value(_FakeIssue_16(
-              this, Invocation.method(#get, [slug, issueNumber]))),
-          returnValueForMissingStub: _i4.Future<_i3.Issue>.value(_FakeIssue_16(
-              this, Invocation.method(#get, [slug, issueNumber])))) as _i4
-          .Future<_i3.Issue>);
-  @override
-  _i4.Future<_i3.Issue> create(
-          _i3.RepositorySlug? slug, _i3.IssueRequest? issue) =>
-      (super.noSuchMethod(Invocation.method(#create, [slug, issue]),
-          returnValue: _i4.Future<_i3.Issue>.value(
-              _FakeIssue_16(this, Invocation.method(#create, [slug, issue]))),
-          returnValueForMissingStub: _i4.Future<_i3.Issue>.value(_FakeIssue_16(
-              this, Invocation.method(#create, [slug, issue])))) as _i4
-          .Future<_i3.Issue>);
-  @override
-  _i4.Stream<_i3.User> listAssignees(_i3.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listAssignees, [slug]),
-              returnValue: _i4.Stream<_i3.User>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.User>.empty())
-          as _i4.Stream<_i3.User>);
-  @override
-  _i4.Future<bool> isAssignee(_i3.RepositorySlug? slug, String? repoName) =>
-      (super.noSuchMethod(Invocation.method(#isAssignee, [slug, repoName]),
-              returnValue: _i4.Future<bool>.value(false),
-              returnValueForMissingStub: _i4.Future<bool>.value(false))
-          as _i4.Future<bool>);
-  @override
-  _i4.Stream<_i3.IssueComment> listCommentsByIssue(
-          _i3.RepositorySlug? slug, int? issueNumber) =>
-      (super.noSuchMethod(
-              Invocation.method(#listCommentsByIssue, [slug, issueNumber]),
-              returnValue: _i4.Stream<_i3.IssueComment>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.IssueComment>.empty())
-          as _i4.Stream<_i3.IssueComment>);
-  @override
-  _i4.Stream<_i3.IssueComment> listCommentsByRepo(_i3.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCommentsByRepo, [slug]),
-              returnValue: _i4.Stream<_i3.IssueComment>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.IssueComment>.empty())
-          as _i4.Stream<_i3.IssueComment>);
-  @override
-  _i4.Future<_i3.IssueComment> getComment(_i3.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#getComment, [slug, id]),
-          returnValue: _i4.Future<_i3.IssueComment>.value(_FakeIssueComment_17(
-              this, Invocation.method(#getComment, [slug, id]))),
-          returnValueForMissingStub: _i4.Future<_i3.IssueComment>.value(
-              _FakeIssueComment_17(
-                  this, Invocation.method(#getComment, [slug, id])))) as _i4
-          .Future<_i3.IssueComment>);
-  @override
-  _i4.Future<_i3.IssueComment> createComment(
-          _i3.RepositorySlug? slug, int? issueNumber, String? body) =>
-      (super.noSuchMethod(
-          Invocation.method(#createComment, [slug, issueNumber, body]),
-          returnValue: _i4.Future<_i3.IssueComment>.value(_FakeIssueComment_17(
-              this,
-              Invocation.method(#createComment, [slug, issueNumber, body]))),
-          returnValueForMissingStub: _i4.Future<_i3.IssueComment>.value(
-              _FakeIssueComment_17(this, Invocation.method(#createComment, [slug, issueNumber, body])))) as _i4
-          .Future<_i3.IssueComment>);
-  @override
-  _i4.Future<_i3.IssueComment> updateComment(
-          _i3.RepositorySlug? slug, int? id, String? body) =>
-      (super.noSuchMethod(Invocation.method(#updateComment, [slug, id, body]),
-              returnValue: _i4.Future<_i3.IssueComment>.value(
-                  _FakeIssueComment_17(
-                      this, Invocation.method(#updateComment, [slug, id, body]))),
-              returnValueForMissingStub: _i4.Future<_i3.IssueComment>.value(
-                  _FakeIssueComment_17(
-                      this, Invocation.method(#updateComment, [slug, id, body]))))
-          as _i4.Future<_i3.IssueComment>);
-  @override
-  _i4.Future<bool> deleteComment(_i3.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#deleteComment, [slug, id]),
-              returnValue: _i4.Future<bool>.value(false),
-              returnValueForMissingStub: _i4.Future<bool>.value(false))
-          as _i4.Future<bool>);
-  @override
-  _i4.Stream<_i3.IssueLabel> listLabels(_i3.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listLabels, [slug]),
-              returnValue: _i4.Stream<_i3.IssueLabel>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.IssueLabel>.empty())
-          as _i4.Stream<_i3.IssueLabel>);
-  @override
-  _i4.Future<_i3.IssueLabel> getLabel(_i3.RepositorySlug? slug, String? name) =>
-      (super.noSuchMethod(Invocation.method(#getLabel, [slug, name]),
-              returnValue: _i4.Future<_i3.IssueLabel>.value(_FakeIssueLabel_18(
-                  this, Invocation.method(#getLabel, [slug, name]))),
-              returnValueForMissingStub: _i4.Future<_i3.IssueLabel>.value(
-                  _FakeIssueLabel_18(
-                      this, Invocation.method(#getLabel, [slug, name]))))
-          as _i4.Future<_i3.IssueLabel>);
-  @override
-  _i4.Future<_i3.IssueLabel> createLabel(
-          _i3.RepositorySlug? slug, String? name, String? color) =>
-      (super.noSuchMethod(Invocation.method(#createLabel, [slug, name, color]),
-              returnValue: _i4.Future<_i3.IssueLabel>.value(_FakeIssueLabel_18(
-                  this, Invocation.method(#createLabel, [slug, name, color]))),
-              returnValueForMissingStub: _i4.Future<_i3.IssueLabel>.value(
-                  _FakeIssueLabel_18(
-                      this, Invocation.method(#createLabel, [slug, name, color]))))
-          as _i4.Future<_i3.IssueLabel>);
-  @override
-  _i4.Future<_i3.IssueLabel> editLabel(
-          _i3.RepositorySlug? slug, String? name, String? color) =>
-      (super.noSuchMethod(Invocation.method(#editLabel, [slug, name, color]),
-              returnValue: _i4.Future<_i3.IssueLabel>.value(_FakeIssueLabel_18(
-                  this, Invocation.method(#editLabel, [slug, name, color]))),
-              returnValueForMissingStub: _i4.Future<_i3.IssueLabel>.value(
-                  _FakeIssueLabel_18(
-                      this, Invocation.method(#editLabel, [slug, name, color]))))
-          as _i4.Future<_i3.IssueLabel>);
-  @override
-  _i4.Future<bool> deleteLabel(_i3.RepositorySlug? slug, String? name) =>
-      (super.noSuchMethod(Invocation.method(#deleteLabel, [slug, name]),
-              returnValue: _i4.Future<bool>.value(false),
-              returnValueForMissingStub: _i4.Future<bool>.value(false))
-          as _i4.Future<bool>);
-  @override
-  _i4.Stream<_i3.IssueLabel> listLabelsByIssue(
-          _i3.RepositorySlug? slug, int? issueNumber) =>
-      (super.noSuchMethod(
-              Invocation.method(#listLabelsByIssue, [slug, issueNumber]),
-              returnValue: _i4.Stream<_i3.IssueLabel>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.IssueLabel>.empty())
-          as _i4.Stream<_i3.IssueLabel>);
-  @override
-  _i4.Future<List<_i3.IssueLabel>> addLabelsToIssue(
-          _i3.RepositorySlug? slug, int? issueNumber, List<String>? labels) =>
-      (super.noSuchMethod(
-              Invocation.method(#addLabelsToIssue, [slug, issueNumber, labels]),
-              returnValue:
-                  _i4.Future<List<_i3.IssueLabel>>.value(<_i3.IssueLabel>[]),
-              returnValueForMissingStub:
-                  _i4.Future<List<_i3.IssueLabel>>.value(<_i3.IssueLabel>[]))
-          as _i4.Future<List<_i3.IssueLabel>>);
-  @override
-  _i4.Future<List<_i3.IssueLabel>> replaceLabelsForIssue(
-          _i3.RepositorySlug? slug, int? issueNumber, List<String>? labels) =>
-      (super.noSuchMethod(
-              Invocation.method(
-                  #replaceLabelsForIssue, [slug, issueNumber, labels]),
-              returnValue:
-                  _i4.Future<List<_i3.IssueLabel>>.value(<_i3.IssueLabel>[]),
-              returnValueForMissingStub:
-                  _i4.Future<List<_i3.IssueLabel>>.value(<_i3.IssueLabel>[]))
-          as _i4.Future<List<_i3.IssueLabel>>);
-  @override
-  _i4.Future<bool> removeLabelForIssue(
-          _i3.RepositorySlug? slug, int? issueNumber, String? label) =>
-      (super.noSuchMethod(
-          Invocation.method(#removeLabelForIssue, [slug, issueNumber, label]),
-          returnValue: _i4.Future<bool>.value(false),
-          returnValueForMissingStub:
-              _i4.Future<bool>.value(false)) as _i4.Future<bool>);
-  @override
-  _i4.Future<bool> removeAllLabelsForIssue(
-          _i3.RepositorySlug? slug, int? issueNumber) =>
-      (super.noSuchMethod(
-              Invocation.method(#removeAllLabelsForIssue, [slug, issueNumber]),
-              returnValue: _i4.Future<bool>.value(false),
-              returnValueForMissingStub: _i4.Future<bool>.value(false))
-          as _i4.Future<bool>);
-  @override
-  _i4.Stream<_i3.Milestone> listMilestones(_i3.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listMilestones, [slug]),
-              returnValue: _i4.Stream<_i3.Milestone>.empty(),
-              returnValueForMissingStub: _i4.Stream<_i3.Milestone>.empty())
-          as _i4.Stream<_i3.Milestone>);
-  @override
-  _i4.Future<_i3.Milestone> createMilestone(
-          _i3.RepositorySlug? slug, _i3.CreateMilestone? request) =>
-      (super.noSuchMethod(Invocation.method(#createMilestone, [slug, request]),
-              returnValue: _i4.Future<_i3.Milestone>.value(_FakeMilestone_19(
-                  this, Invocation.method(#createMilestone, [slug, request]))),
-              returnValueForMissingStub: _i4.Future<_i3.Milestone>.value(
-                  _FakeMilestone_19(
-                      this, Invocation.method(#createMilestone, [slug, request]))))
-          as _i4.Future<_i3.Milestone>);
-  @override
-  _i4.Future<bool> deleteMilestone(_i3.RepositorySlug? slug, int? number) =>
-      (super.noSuchMethod(Invocation.method(#deleteMilestone, [slug, number]),
-              returnValue: _i4.Future<bool>.value(false),
-              returnValueForMissingStub: _i4.Future<bool>.value(false))
-          as _i4.Future<bool>);
-}
diff --git a/github-label-notifier/symbolizer/test/data/test01.expected.txt b/github-label-notifier/symbolizer/test/data/test01.expected.txt
index 266e574..6b502c9 100644
--- a/github-label-notifier/symbolizer/test/data/test01.expected.txt
+++ b/github-label-notifier/symbolizer/test/data/test01.expected.txt
@@ -5,7 +5,7 @@
         "engineVariant": {
           "os": "android",
           "arch": "arm",
-          "mode": null
+          "mode": "release"
         },
         "frames": [
           {
@@ -33,19 +33,14 @@
         }
       },
       "symbolized": "#00 96a85449 <...>/lib/arm/libflutter.so+0x1384449\n                                         ??\n                                         ??:0:0\n#01 969c0e81 <...>/lib/arm/libflutter.so+0x12bfe81\n                                         ??\n                                         ??:0:0\n",
-      "notes": [
-        {
-          "kind": "defaultedToReleaseBuildIdUnavailable",
-          "message": null
-        }
-      ]
+      "notes": []
     },
     {
       "crash": {
         "engineVariant": {
           "os": "android",
           "arch": "arm",
-          "mode": null
+          "mode": "release"
         },
         "frames": [
           {
@@ -77,12 +72,7 @@
         }
       },
       "symbolized": "#00 0001a43c /system/lib/libc.so (abort+63)\n#01 002bce85 <...>/lib/arm/libflutter.so (offset 0x1002000)\n                                         EllipticalRRectOp::EllipticalRRectOp(GrSimpleMeshDrawOpHelper::MakeArgs, SkRGBA4f<(SkAlphaType)2> const&, SkMatrix const&, SkRect const&, float, float, SkPoint, bool)\n                                         third_party/skia/src/gpu/ops/GrOvalOpFactory.cpp:2896:18\n",
-      "notes": [
-        {
-          "kind": "defaultedToReleaseBuildIdUnavailable",
-          "message": null
-        }
-      ]
+      "notes": []
     }
   ],
   "runtimeType": "ok"
diff --git a/github-label-notifier/symbolizer/test/symbolizer_test.dart b/github-label-notifier/symbolizer/test/symbolizer_test.dart
index eddd856..69cb760 100644
--- a/github-label-notifier/symbolizer/test/symbolizer_test.dart
+++ b/github-label-notifier/symbolizer/test/symbolizer_test.dart
@@ -9,7 +9,6 @@
 import 'package:mockito/annotations.dart';
 import 'package:mockito/mockito.dart';
 import 'package:path/path.dart' as p;
-import 'package:symbolizer/bot.dart';
 import 'package:symbolizer/config.dart';
 import 'package:symbolizer/model.dart';
 import 'package:symbolizer/ndk.dart';
@@ -49,7 +48,7 @@
     final files = Directory('test/data').listSync();
 
     setUpAll(() {
-      final ndk = Ndk();
+      final ndk = Ndk(llvmTools: LlvmTools.findTools()!);
       final symbols =
           SymbolsCache(path: 'symbols-cache', ndk: ndk, sizeThreshold: 100);
       final github = GitHub(auth: Authentication.withToken(config.githubToken));
@@ -63,7 +62,8 @@
       final expectationFile = File('test/data/$testName.expected.txt');
       test(testName, () async {
         final input = await inputFile.readAsString();
-        final overrides = Bot.parseCommand(0, input)?.overrides;
+        final overrides =
+            SymbolizationOverrides.tryParse(input.split('\n').first);
         final result = await symbolizer.symbolize(input, overrides: overrides);
         final roundTrip =
             SymbolizationResult.fromJson(jsonDecode(jsonEncode(result)));
diff --git a/github-label-notifier/symbolizer/test/symbolizer_test.mocks.dart b/github-label-notifier/symbolizer/test/symbolizer_test.mocks.dart
index 47c5686..39921dd 100644
--- a/github-label-notifier/symbolizer/test/symbolizer_test.mocks.dart
+++ b/github-label-notifier/symbolizer/test/symbolizer_test.mocks.dart
@@ -1,21 +1,24 @@
-// Mocks generated by Mockito 5.3.0 from annotations
+// Mocks generated by Mockito 5.4.4 from annotations
 // in symbolizer/test/symbolizer_test.dart.
 // Do not manually edit this file.
 
 // ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i7;
+import 'dart:async' as _i5;
 
-import 'package:github/src/common.dart' as _i4;
-import 'package:http/http.dart' as _i3;
+import 'package:github/src/common.dart' as _i3;
+import 'package:http/http.dart' as _i4;
 import 'package:mockito/mockito.dart' as _i1;
+import 'package:mockito/src/dummies.dart' as _i8;
 import 'package:symbolizer/model.dart' as _i2;
-import 'package:symbolizer/ndk.dart' as _i5;
-import 'package:symbolizer/symbols.dart' as _i6;
+import 'package:symbolizer/ndk.dart' as _i6;
+import 'package:symbolizer/symbols.dart' as _i7;
 
 // ignore_for_file: type=lint
 // ignore_for_file: avoid_redundant_argument_values
 // ignore_for_file: avoid_setters_without_getters
 // ignore_for_file: comment_references
+// ignore_for_file: deprecated_member_use
+// ignore_for_file: deprecated_member_use_from_same_package
 // ignore_for_file: implementation_imports
 // ignore_for_file: invalid_use_of_visible_for_testing_member
 // ignore_for_file: prefer_const_constructors
@@ -24,980 +27,2568 @@
 // ignore_for_file: subtype_of_sealed_class
 
 class _FakeEngineBuild_0 extends _i1.SmartFake implements _i2.EngineBuild {
-  _FakeEngineBuild_0(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+  _FakeEngineBuild_0(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeClient_1 extends _i1.SmartFake implements _i3.Client {
-  _FakeClient_1(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeAuthentication_1 extends _i1.SmartFake
+    implements _i3.Authentication {
+  _FakeAuthentication_1(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeActivityService_2 extends _i1.SmartFake
-    implements _i4.ActivityService {
-  _FakeActivityService_2(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeClient_2 extends _i1.SmartFake implements _i4.Client {
+  _FakeClient_2(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeAuthorizationsService_3 extends _i1.SmartFake
-    implements _i4.AuthorizationsService {
-  _FakeAuthorizationsService_3(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeActivityService_3 extends _i1.SmartFake
+    implements _i3.ActivityService {
+  _FakeActivityService_3(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeGistsService_4 extends _i1.SmartFake implements _i4.GistsService {
-  _FakeGistsService_4(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeAuthorizationsService_4 extends _i1.SmartFake
+    implements _i3.AuthorizationsService {
+  _FakeAuthorizationsService_4(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeGitService_5 extends _i1.SmartFake implements _i4.GitService {
-  _FakeGitService_5(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeGistsService_5 extends _i1.SmartFake implements _i3.GistsService {
+  _FakeGistsService_5(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeIssuesService_6 extends _i1.SmartFake implements _i4.IssuesService {
-  _FakeIssuesService_6(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeGitService_6 extends _i1.SmartFake implements _i3.GitService {
+  _FakeGitService_6(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeMiscService_7 extends _i1.SmartFake implements _i4.MiscService {
-  _FakeMiscService_7(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeIssuesService_7 extends _i1.SmartFake implements _i3.IssuesService {
+  _FakeIssuesService_7(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeOrganizationsService_8 extends _i1.SmartFake
-    implements _i4.OrganizationsService {
-  _FakeOrganizationsService_8(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeMiscService_8 extends _i1.SmartFake implements _i3.MiscService {
+  _FakeMiscService_8(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakePullRequestsService_9 extends _i1.SmartFake
-    implements _i4.PullRequestsService {
-  _FakePullRequestsService_9(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeOrganizationsService_9 extends _i1.SmartFake
+    implements _i3.OrganizationsService {
+  _FakeOrganizationsService_9(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepositoriesService_10 extends _i1.SmartFake
-    implements _i4.RepositoriesService {
-  _FakeRepositoriesService_10(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakePullRequestsService_10 extends _i1.SmartFake
+    implements _i3.PullRequestsService {
+  _FakePullRequestsService_10(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeSearchService_11 extends _i1.SmartFake implements _i4.SearchService {
-  _FakeSearchService_11(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRepositoriesService_11 extends _i1.SmartFake
+    implements _i3.RepositoriesService {
+  _FakeRepositoriesService_11(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeUrlShortenerService_12 extends _i1.SmartFake
-    implements _i4.UrlShortenerService {
-  _FakeUrlShortenerService_12(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeSearchService_12 extends _i1.SmartFake implements _i3.SearchService {
+  _FakeSearchService_12(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeUsersService_13 extends _i1.SmartFake implements _i4.UsersService {
-  _FakeUsersService_13(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeUrlShortenerService_13 extends _i1.SmartFake
+    implements _i3.UrlShortenerService {
+  _FakeUrlShortenerService_13(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeChecksService_14 extends _i1.SmartFake implements _i4.ChecksService {
-  _FakeChecksService_14(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeUsersService_14 extends _i1.SmartFake implements _i3.UsersService {
+  _FakeUsersService_14(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeResponse_15 extends _i1.SmartFake implements _i3.Response {
-  _FakeResponse_15(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeChecksService_15 extends _i1.SmartFake implements _i3.ChecksService {
+  _FakeChecksService_15(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeSectionInfo_16 extends _i1.SmartFake implements _i5.SectionInfo {
-  _FakeSectionInfo_16(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeFuture_16<T1> extends _i1.SmartFake implements _i5.Future<T1> {
+  _FakeFuture_16(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeGitHub_17 extends _i1.SmartFake implements _i4.GitHub {
-  _FakeGitHub_17(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeResponse_17 extends _i1.SmartFake implements _i4.Response {
+  _FakeResponse_17(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepository_18 extends _i1.SmartFake implements _i4.Repository {
-  _FakeRepository_18(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeLlvmTools_18 extends _i1.SmartFake implements _i6.LlvmTools {
+  _FakeLlvmTools_18(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeLicenseDetails_19 extends _i1.SmartFake
-    implements _i4.LicenseDetails {
-  _FakeLicenseDetails_19(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeSectionInfo_19 extends _i1.SmartFake implements _i6.SectionInfo {
+  _FakeSectionInfo_19(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeLanguageBreakdown_20 extends _i1.SmartFake
-    implements _i4.LanguageBreakdown {
-  _FakeLanguageBreakdown_20(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeGitHub_20 extends _i1.SmartFake implements _i3.GitHub {
+  _FakeGitHub_20(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeBranch_21 extends _i1.SmartFake implements _i4.Branch {
-  _FakeBranch_21(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRepository_21 extends _i1.SmartFake implements _i3.Repository {
+  _FakeRepository_21(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeCommitComment_22 extends _i1.SmartFake implements _i4.CommitComment {
-  _FakeCommitComment_22(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeLicenseDetails_22 extends _i1.SmartFake
+    implements _i3.LicenseDetails {
+  _FakeLicenseDetails_22(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepositoryCommit_23 extends _i1.SmartFake
-    implements _i4.RepositoryCommit {
-  _FakeRepositoryCommit_23(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeLanguageBreakdown_23 extends _i1.SmartFake
+    implements _i3.LanguageBreakdown {
+  _FakeLanguageBreakdown_23(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeGitHubComparison_24 extends _i1.SmartFake
-    implements _i4.GitHubComparison {
-  _FakeGitHubComparison_24(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeBranch_24 extends _i1.SmartFake implements _i3.Branch {
+  _FakeBranch_24(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeGitHubFile_25 extends _i1.SmartFake implements _i4.GitHubFile {
-  _FakeGitHubFile_25(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeCommitComment_25 extends _i1.SmartFake implements _i3.CommitComment {
+  _FakeCommitComment_25(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepositoryContents_26 extends _i1.SmartFake
-    implements _i4.RepositoryContents {
-  _FakeRepositoryContents_26(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRepositoryCommit_26 extends _i1.SmartFake
+    implements _i3.RepositoryCommit {
+  _FakeRepositoryCommit_26(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeContentCreation_27 extends _i1.SmartFake
-    implements _i4.ContentCreation {
-  _FakeContentCreation_27(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeGitHubComparison_27 extends _i1.SmartFake
+    implements _i3.GitHubComparison {
+  _FakeGitHubComparison_27(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeHook_28 extends _i1.SmartFake implements _i4.Hook {
-  _FakeHook_28(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeGitHubFile_28 extends _i1.SmartFake implements _i3.GitHubFile {
+  _FakeGitHubFile_28(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakePublicKey_29 extends _i1.SmartFake implements _i4.PublicKey {
-  _FakePublicKey_29(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRepositoryContents_29 extends _i1.SmartFake
+    implements _i3.RepositoryContents {
+  _FakeRepositoryContents_29(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepositoryPages_30 extends _i1.SmartFake
-    implements _i4.RepositoryPages {
-  _FakeRepositoryPages_30(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeContentCreation_30 extends _i1.SmartFake
+    implements _i3.ContentCreation {
+  _FakeContentCreation_30(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakePageBuild_31 extends _i1.SmartFake implements _i4.PageBuild {
-  _FakePageBuild_31(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeHook_31 extends _i1.SmartFake implements _i3.Hook {
+  _FakeHook_31(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRelease_32 extends _i1.SmartFake implements _i4.Release {
-  _FakeRelease_32(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakePublicKey_32 extends _i1.SmartFake implements _i3.PublicKey {
+  _FakePublicKey_32(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeReleaseAsset_33 extends _i1.SmartFake implements _i4.ReleaseAsset {
-  _FakeReleaseAsset_33(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRepositoryPages_33 extends _i1.SmartFake
+    implements _i3.RepositoryPages {
+  _FakeRepositoryPages_33(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeContributorParticipation_34 extends _i1.SmartFake
-    implements _i4.ContributorParticipation {
-  _FakeContributorParticipation_34(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakePageBuild_34 extends _i1.SmartFake implements _i3.PageBuild {
+  _FakePageBuild_34(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeRepositoryStatus_35 extends _i1.SmartFake
-    implements _i4.RepositoryStatus {
-  _FakeRepositoryStatus_35(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeRelease_35 extends _i1.SmartFake implements _i3.Release {
+  _FakeRelease_35(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeCombinedRepositoryStatus_36 extends _i1.SmartFake
-    implements _i4.CombinedRepositoryStatus {
-  _FakeCombinedRepositoryStatus_36(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeReleaseAsset_36 extends _i1.SmartFake implements _i3.ReleaseAsset {
+  _FakeReleaseAsset_36(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
-class _FakeReleaseNotes_37 extends _i1.SmartFake implements _i4.ReleaseNotes {
-  _FakeReleaseNotes_37(Object parent, Invocation parentInvocation)
-      : super(parent, parentInvocation);
+class _FakeContributorParticipation_37 extends _i1.SmartFake
+    implements _i3.ContributorParticipation {
+  _FakeContributorParticipation_37(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeRepositoryStatus_38 extends _i1.SmartFake
+    implements _i3.RepositoryStatus {
+  _FakeRepositoryStatus_38(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeCombinedRepositoryStatus_39 extends _i1.SmartFake
+    implements _i3.CombinedRepositoryStatus {
+  _FakeCombinedRepositoryStatus_39(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeReleaseNotes_40 extends _i1.SmartFake implements _i3.ReleaseNotes {
+  _FakeReleaseNotes_40(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
 }
 
 /// A class which mocks [SymbolsCache].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockSymbolsCache extends _i1.Mock implements _i6.SymbolsCache {
+class MockSymbolsCache extends _i1.Mock implements _i7.SymbolsCache {
   @override
-  _i7.Future<String> get(_i2.EngineBuild? build) =>
-      (super.noSuchMethod(Invocation.method(#get, [build]),
-              returnValue: _i7.Future<String>.value(''),
-              returnValueForMissingStub: _i7.Future<String>.value(''))
-          as _i7.Future<String>);
+  _i5.Future<String> get(_i2.EngineBuild? build) => (super.noSuchMethod(
+        Invocation.method(
+          #get,
+          [build],
+        ),
+        returnValue: _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #get,
+            [build],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #get,
+            [build],
+          ),
+        )),
+      ) as _i5.Future<String>);
+
   @override
-  _i7.Future<String> getEngineBinary(_i2.EngineBuild? build) =>
-      (super.noSuchMethod(Invocation.method(#getEngineBinary, [build]),
-              returnValue: _i7.Future<String>.value(''),
-              returnValueForMissingStub: _i7.Future<String>.value(''))
-          as _i7.Future<String>);
+  _i5.Future<String> getEngineBinary(_i2.EngineBuild? build) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getEngineBinary,
+          [build],
+        ),
+        returnValue: _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getEngineBinary,
+            [build],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getEngineBinary,
+            [build],
+          ),
+        )),
+      ) as _i5.Future<String>);
+
   @override
-  _i7.Future<_i2.EngineBuild> findVariantByBuildId(
-          {String? engineHash, _i2.EngineVariant? variant, String? buildId}) =>
-      (super.noSuchMethod(Invocation.method(#findVariantByBuildId, [], {#engineHash: engineHash, #variant: variant, #buildId: buildId}),
-              returnValue: _i7.Future<_i2.EngineBuild>.value(_FakeEngineBuild_0(
-                  this,
-                  Invocation.method(#findVariantByBuildId, [], {
-                    #engineHash: engineHash,
-                    #variant: variant,
-                    #buildId: buildId
-                  }))),
-              returnValueForMissingStub:
-                  _i7.Future<_i2.EngineBuild>.value(_FakeEngineBuild_0(this, Invocation.method(#findVariantByBuildId, [], {#engineHash: engineHash, #variant: variant, #buildId: buildId}))))
-          as _i7.Future<_i2.EngineBuild>);
+  _i5.Future<_i2.EngineBuild> findVariantByBuildId({
+    required String? engineHash,
+    required _i2.EngineVariant? variant,
+    required String? buildId,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #findVariantByBuildId,
+          [],
+          {
+            #engineHash: engineHash,
+            #variant: variant,
+            #buildId: buildId,
+          },
+        ),
+        returnValue: _i5.Future<_i2.EngineBuild>.value(_FakeEngineBuild_0(
+          this,
+          Invocation.method(
+            #findVariantByBuildId,
+            [],
+            {
+              #engineHash: engineHash,
+              #variant: variant,
+              #buildId: buildId,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i2.EngineBuild>.value(_FakeEngineBuild_0(
+          this,
+          Invocation.method(
+            #findVariantByBuildId,
+            [],
+            {
+              #engineHash: engineHash,
+              #variant: variant,
+              #buildId: buildId,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i2.EngineBuild>);
 }
 
 /// A class which mocks [GitHub].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockGitHub extends _i1.Mock implements _i4.GitHub {
+class MockGitHub extends _i1.Mock implements _i3.GitHub {
   @override
-  set auth(_i4.Authentication? _auth) =>
-      super.noSuchMethod(Invocation.setter(#auth, _auth),
-          returnValueForMissingStub: null);
+  _i3.Authentication get auth => (super.noSuchMethod(
+        Invocation.getter(#auth),
+        returnValue: _FakeAuthentication_1(
+          this,
+          Invocation.getter(#auth),
+        ),
+        returnValueForMissingStub: _FakeAuthentication_1(
+          this,
+          Invocation.getter(#auth),
+        ),
+      ) as _i3.Authentication);
+
   @override
-  String get endpoint => (super.noSuchMethod(Invocation.getter(#endpoint),
-      returnValue: '', returnValueForMissingStub: '') as String);
+  set auth(_i3.Authentication? _auth) => super.noSuchMethod(
+        Invocation.setter(
+          #auth,
+          _auth,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  _i3.Client get client => (super.noSuchMethod(Invocation.getter(#client),
-      returnValue: _FakeClient_1(this, Invocation.getter(#client)),
-      returnValueForMissingStub:
-          _FakeClient_1(this, Invocation.getter(#client))) as _i3.Client);
+  String get endpoint => (super.noSuchMethod(
+        Invocation.getter(#endpoint),
+        returnValue: _i8.dummyValue<String>(
+          this,
+          Invocation.getter(#endpoint),
+        ),
+        returnValueForMissingStub: _i8.dummyValue<String>(
+          this,
+          Invocation.getter(#endpoint),
+        ),
+      ) as String);
+
   @override
-  _i4.ActivityService get activity => (super.noSuchMethod(
-      Invocation.getter(#activity),
-      returnValue: _FakeActivityService_2(this, Invocation.getter(#activity)),
-      returnValueForMissingStub: _FakeActivityService_2(
-          this, Invocation.getter(#activity))) as _i4.ActivityService);
+  String get version => (super.noSuchMethod(
+        Invocation.getter(#version),
+        returnValue: _i8.dummyValue<String>(
+          this,
+          Invocation.getter(#version),
+        ),
+        returnValueForMissingStub: _i8.dummyValue<String>(
+          this,
+          Invocation.getter(#version),
+        ),
+      ) as String);
+
   @override
-  _i4.AuthorizationsService get authorizations =>
-      (super.noSuchMethod(Invocation.getter(#authorizations),
-              returnValue: _FakeAuthorizationsService_3(
-                  this, Invocation.getter(#authorizations)),
-              returnValueForMissingStub: _FakeAuthorizationsService_3(
-                  this, Invocation.getter(#authorizations)))
-          as _i4.AuthorizationsService);
+  _i4.Client get client => (super.noSuchMethod(
+        Invocation.getter(#client),
+        returnValue: _FakeClient_2(
+          this,
+          Invocation.getter(#client),
+        ),
+        returnValueForMissingStub: _FakeClient_2(
+          this,
+          Invocation.getter(#client),
+        ),
+      ) as _i4.Client);
+
   @override
-  _i4.GistsService get gists => (super.noSuchMethod(Invocation.getter(#gists),
-          returnValue: _FakeGistsService_4(this, Invocation.getter(#gists)),
-          returnValueForMissingStub:
-              _FakeGistsService_4(this, Invocation.getter(#gists)))
-      as _i4.GistsService);
+  _i3.ActivityService get activity => (super.noSuchMethod(
+        Invocation.getter(#activity),
+        returnValue: _FakeActivityService_3(
+          this,
+          Invocation.getter(#activity),
+        ),
+        returnValueForMissingStub: _FakeActivityService_3(
+          this,
+          Invocation.getter(#activity),
+        ),
+      ) as _i3.ActivityService);
+
   @override
-  _i4.GitService get git => (super.noSuchMethod(Invocation.getter(#git),
-      returnValue: _FakeGitService_5(this, Invocation.getter(#git)),
-      returnValueForMissingStub:
-          _FakeGitService_5(this, Invocation.getter(#git))) as _i4.GitService);
+  _i3.AuthorizationsService get authorizations => (super.noSuchMethod(
+        Invocation.getter(#authorizations),
+        returnValue: _FakeAuthorizationsService_4(
+          this,
+          Invocation.getter(#authorizations),
+        ),
+        returnValueForMissingStub: _FakeAuthorizationsService_4(
+          this,
+          Invocation.getter(#authorizations),
+        ),
+      ) as _i3.AuthorizationsService);
+
   @override
-  _i4.IssuesService get issues => (super.noSuchMethod(
+  _i3.GistsService get gists => (super.noSuchMethod(
+        Invocation.getter(#gists),
+        returnValue: _FakeGistsService_5(
+          this,
+          Invocation.getter(#gists),
+        ),
+        returnValueForMissingStub: _FakeGistsService_5(
+          this,
+          Invocation.getter(#gists),
+        ),
+      ) as _i3.GistsService);
+
+  @override
+  _i3.GitService get git => (super.noSuchMethod(
+        Invocation.getter(#git),
+        returnValue: _FakeGitService_6(
+          this,
+          Invocation.getter(#git),
+        ),
+        returnValueForMissingStub: _FakeGitService_6(
+          this,
+          Invocation.getter(#git),
+        ),
+      ) as _i3.GitService);
+
+  @override
+  _i3.IssuesService get issues => (super.noSuchMethod(
+        Invocation.getter(#issues),
+        returnValue: _FakeIssuesService_7(
+          this,
           Invocation.getter(#issues),
-          returnValue: _FakeIssuesService_6(this, Invocation.getter(#issues)),
-          returnValueForMissingStub:
-              _FakeIssuesService_6(this, Invocation.getter(#issues)))
-      as _i4.IssuesService);
+        ),
+        returnValueForMissingStub: _FakeIssuesService_7(
+          this,
+          Invocation.getter(#issues),
+        ),
+      ) as _i3.IssuesService);
+
   @override
-  _i4.MiscService get misc => (super.noSuchMethod(Invocation.getter(#misc),
-          returnValue: _FakeMiscService_7(this, Invocation.getter(#misc)),
-          returnValueForMissingStub:
-              _FakeMiscService_7(this, Invocation.getter(#misc)))
-      as _i4.MiscService);
+  _i3.MiscService get misc => (super.noSuchMethod(
+        Invocation.getter(#misc),
+        returnValue: _FakeMiscService_8(
+          this,
+          Invocation.getter(#misc),
+        ),
+        returnValueForMissingStub: _FakeMiscService_8(
+          this,
+          Invocation.getter(#misc),
+        ),
+      ) as _i3.MiscService);
+
   @override
-  _i4.OrganizationsService get organizations => (super.noSuchMethod(
-      Invocation.getter(#organizations),
-      returnValue:
-          _FakeOrganizationsService_8(this, Invocation.getter(#organizations)),
-      returnValueForMissingStub: _FakeOrganizationsService_8(
-          this, Invocation.getter(#organizations))) as _i4
-      .OrganizationsService);
+  _i3.OrganizationsService get organizations => (super.noSuchMethod(
+        Invocation.getter(#organizations),
+        returnValue: _FakeOrganizationsService_9(
+          this,
+          Invocation.getter(#organizations),
+        ),
+        returnValueForMissingStub: _FakeOrganizationsService_9(
+          this,
+          Invocation.getter(#organizations),
+        ),
+      ) as _i3.OrganizationsService);
+
   @override
-  _i4.PullRequestsService get pullRequests => (super.noSuchMethod(
-      Invocation.getter(#pullRequests),
-      returnValue:
-          _FakePullRequestsService_9(this, Invocation.getter(#pullRequests)),
-      returnValueForMissingStub: _FakePullRequestsService_9(
-          this, Invocation.getter(#pullRequests))) as _i4.PullRequestsService);
+  _i3.PullRequestsService get pullRequests => (super.noSuchMethod(
+        Invocation.getter(#pullRequests),
+        returnValue: _FakePullRequestsService_10(
+          this,
+          Invocation.getter(#pullRequests),
+        ),
+        returnValueForMissingStub: _FakePullRequestsService_10(
+          this,
+          Invocation.getter(#pullRequests),
+        ),
+      ) as _i3.PullRequestsService);
+
   @override
-  _i4.RepositoriesService get repositories => (super.noSuchMethod(
-      Invocation.getter(#repositories),
-      returnValue:
-          _FakeRepositoriesService_10(this, Invocation.getter(#repositories)),
-      returnValueForMissingStub: _FakeRepositoriesService_10(
-          this, Invocation.getter(#repositories))) as _i4.RepositoriesService);
+  _i3.RepositoriesService get repositories => (super.noSuchMethod(
+        Invocation.getter(#repositories),
+        returnValue: _FakeRepositoriesService_11(
+          this,
+          Invocation.getter(#repositories),
+        ),
+        returnValueForMissingStub: _FakeRepositoriesService_11(
+          this,
+          Invocation.getter(#repositories),
+        ),
+      ) as _i3.RepositoriesService);
+
   @override
-  _i4.SearchService get search => (super.noSuchMethod(
+  _i3.SearchService get search => (super.noSuchMethod(
+        Invocation.getter(#search),
+        returnValue: _FakeSearchService_12(
+          this,
           Invocation.getter(#search),
-          returnValue: _FakeSearchService_11(this, Invocation.getter(#search)),
-          returnValueForMissingStub:
-              _FakeSearchService_11(this, Invocation.getter(#search)))
-      as _i4.SearchService);
+        ),
+        returnValueForMissingStub: _FakeSearchService_12(
+          this,
+          Invocation.getter(#search),
+        ),
+      ) as _i3.SearchService);
+
   @override
-  _i4.UrlShortenerService get urlShortener => (super.noSuchMethod(
-      Invocation.getter(#urlShortener),
-      returnValue:
-          _FakeUrlShortenerService_12(this, Invocation.getter(#urlShortener)),
-      returnValueForMissingStub: _FakeUrlShortenerService_12(
-          this, Invocation.getter(#urlShortener))) as _i4.UrlShortenerService);
+  _i3.UrlShortenerService get urlShortener => (super.noSuchMethod(
+        Invocation.getter(#urlShortener),
+        returnValue: _FakeUrlShortenerService_13(
+          this,
+          Invocation.getter(#urlShortener),
+        ),
+        returnValueForMissingStub: _FakeUrlShortenerService_13(
+          this,
+          Invocation.getter(#urlShortener),
+        ),
+      ) as _i3.UrlShortenerService);
+
   @override
-  _i4.UsersService get users => (super.noSuchMethod(Invocation.getter(#users),
-          returnValue: _FakeUsersService_13(this, Invocation.getter(#users)),
-          returnValueForMissingStub:
-              _FakeUsersService_13(this, Invocation.getter(#users)))
-      as _i4.UsersService);
+  _i3.UsersService get users => (super.noSuchMethod(
+        Invocation.getter(#users),
+        returnValue: _FakeUsersService_14(
+          this,
+          Invocation.getter(#users),
+        ),
+        returnValueForMissingStub: _FakeUsersService_14(
+          this,
+          Invocation.getter(#users),
+        ),
+      ) as _i3.UsersService);
+
   @override
-  _i4.ChecksService get checks => (super.noSuchMethod(
+  _i3.ChecksService get checks => (super.noSuchMethod(
+        Invocation.getter(#checks),
+        returnValue: _FakeChecksService_15(
+          this,
           Invocation.getter(#checks),
-          returnValue: _FakeChecksService_14(this, Invocation.getter(#checks)),
-          returnValueForMissingStub:
-              _FakeChecksService_14(this, Invocation.getter(#checks)))
-      as _i4.ChecksService);
+        ),
+        returnValueForMissingStub: _FakeChecksService_15(
+          this,
+          Invocation.getter(#checks),
+        ),
+      ) as _i3.ChecksService);
+
   @override
-  _i7.Future<T> getJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i3.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, String>? params,
-          _i4.JSONConverter<S, T>? convert,
-          String? preview}) =>
+  _i5.Future<T> getJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, String>? params,
+    _i3.JSONConverter<S, T>? convert,
+    String? preview,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#getJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #preview: preview
-              }),
-              returnValue: _i7.Future<T>.value(null),
-              returnValueForMissingStub: _i7.Future<T>.value(null))
-          as _i7.Future<T>);
+        Invocation.method(
+          #getJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #getJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #getJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #preview: preview,
+                },
+              ),
+            ),
+        returnValueForMissingStub: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #getJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #getJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #preview: preview,
+                },
+              ),
+            ),
+      ) as _i5.Future<T>);
+
   @override
-  _i7.Future<T> postJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i3.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i4.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
+  _i5.Future<T> postJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i3.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#postJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i7.Future<T>.value(null),
-              returnValueForMissingStub: _i7.Future<T>.value(null))
-          as _i7.Future<T>);
+        Invocation.method(
+          #postJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #postJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #postJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+        returnValueForMissingStub: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #postJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #postJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+      ) as _i5.Future<T>);
+
   @override
-  _i7.Future<T> putJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i3.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i4.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
+  _i5.Future<T> putJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i3.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#putJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i7.Future<T>.value(null),
-              returnValueForMissingStub: _i7.Future<T>.value(null))
-          as _i7.Future<T>);
+        Invocation.method(
+          #putJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #putJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #putJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+        returnValueForMissingStub: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #putJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #putJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+      ) as _i5.Future<T>);
+
   @override
-  _i7.Future<T> patchJSON<S, T>(String? path,
-          {int? statusCode,
-          void Function(_i3.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i4.JSONConverter<S, T>? convert,
-          dynamic body,
-          String? preview}) =>
+  _i5.Future<T> patchJSON<S, T>(
+    String? path, {
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i3.JSONConverter<S, T>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#patchJSON, [
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i7.Future<T>.value(null),
-              returnValueForMissingStub: _i7.Future<T>.value(null))
-          as _i7.Future<T>);
+        Invocation.method(
+          #patchJSON,
+          [path],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #patchJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #patchJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+        returnValueForMissingStub: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #patchJSON,
+                  [path],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #patchJSON,
+                [path],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+      ) as _i5.Future<T>);
+
   @override
-  _i7.Future<T> requestJson<S, T>(String? method, String? path,
-          {int? statusCode,
-          void Function(_i3.Response)? fail,
-          Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          _i4.JSONConverter<S, T?>? convert,
-          dynamic body,
-          String? preview}) =>
+  _i5.Future<T> requestJson<S, T>(
+    String? method,
+    String? path, {
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    _i3.JSONConverter<S, T?>? convert,
+    dynamic body,
+    String? preview,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#requestJson, [
-                method,
-                path
-              ], {
-                #statusCode: statusCode,
-                #fail: fail,
-                #headers: headers,
-                #params: params,
-                #convert: convert,
-                #body: body,
-                #preview: preview
-              }),
-              returnValue: _i7.Future<T>.value(null),
-              returnValueForMissingStub: _i7.Future<T>.value(null))
-          as _i7.Future<T>);
-  @override
-  _i7.Future<_i3.Response> request(String? method, String? path,
-          {Map<String, String>? headers,
-          Map<String, dynamic>? params,
-          dynamic body,
-          int? statusCode,
-          void Function(_i3.Response)? fail,
-          String? preview}) =>
-      (super.noSuchMethod(
-          Invocation.method(#request, [
+        Invocation.method(
+          #requestJson,
+          [
             method,
-            path
-          ], {
+            path,
+          ],
+          {
+            #statusCode: statusCode,
+            #fail: fail,
+            #headers: headers,
+            #params: params,
+            #convert: convert,
+            #body: body,
+            #preview: preview,
+          },
+        ),
+        returnValue: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #requestJson,
+                  [
+                    method,
+                    path,
+                  ],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #requestJson,
+                [
+                  method,
+                  path,
+                ],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+        returnValueForMissingStub: _i8.ifNotNull(
+              _i8.dummyValueOrNull<T>(
+                this,
+                Invocation.method(
+                  #requestJson,
+                  [
+                    method,
+                    path,
+                  ],
+                  {
+                    #statusCode: statusCode,
+                    #fail: fail,
+                    #headers: headers,
+                    #params: params,
+                    #convert: convert,
+                    #body: body,
+                    #preview: preview,
+                  },
+                ),
+              ),
+              (T v) => _i5.Future<T>.value(v),
+            ) ??
+            _FakeFuture_16<T>(
+              this,
+              Invocation.method(
+                #requestJson,
+                [
+                  method,
+                  path,
+                ],
+                {
+                  #statusCode: statusCode,
+                  #fail: fail,
+                  #headers: headers,
+                  #params: params,
+                  #convert: convert,
+                  #body: body,
+                  #preview: preview,
+                },
+              ),
+            ),
+      ) as _i5.Future<T>);
+
+  @override
+  _i5.Future<_i4.Response> request(
+    String? method,
+    String? path, {
+    Map<String, String>? headers,
+    Map<String, dynamic>? params,
+    dynamic body,
+    int? statusCode,
+    void Function(_i4.Response)? fail,
+    String? preview,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #request,
+          [
+            method,
+            path,
+          ],
+          {
             #headers: headers,
             #params: params,
             #body: body,
             #statusCode: statusCode,
             #fail: fail,
-            #preview: preview
-          }),
-          returnValue: _i7.Future<_i3.Response>.value(_FakeResponse_15(
-              this,
-              Invocation.method(#request, [
-                method,
-                path
-              ], {
-                #headers: headers,
-                #params: params,
-                #body: body,
-                #statusCode: statusCode,
-                #fail: fail,
-                #preview: preview
-              }))),
-          returnValueForMissingStub:
-              _i7.Future<_i3.Response>.value(_FakeResponse_15(
-                  this,
-                  Invocation.method(#request, [
-                    method,
-                    path
-                  ], {
-                    #headers: headers,
-                    #params: params,
-                    #body: body,
-                    #statusCode: statusCode,
-                    #fail: fail,
-                    #preview: preview
-                  })))) as _i7.Future<_i3.Response>);
+            #preview: preview,
+          },
+        ),
+        returnValue: _i5.Future<_i4.Response>.value(_FakeResponse_17(
+          this,
+          Invocation.method(
+            #request,
+            [
+              method,
+              path,
+            ],
+            {
+              #headers: headers,
+              #params: params,
+              #body: body,
+              #statusCode: statusCode,
+              #fail: fail,
+              #preview: preview,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i4.Response>.value(_FakeResponse_17(
+          this,
+          Invocation.method(
+            #request,
+            [
+              method,
+              path,
+            ],
+            {
+              #headers: headers,
+              #params: params,
+              #body: body,
+              #statusCode: statusCode,
+              #fail: fail,
+              #preview: preview,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i4.Response>);
+
   @override
-  void handleStatusCode(_i3.Response? response) =>
-      super.noSuchMethod(Invocation.method(#handleStatusCode, [response]),
-          returnValueForMissingStub: null);
+  Never handleStatusCode(_i4.Response? response) => (super.noSuchMethod(
+        Invocation.method(
+          #handleStatusCode,
+          [response],
+        ),
+        returnValue: null,
+        returnValueForMissingStub: null,
+      ) as Never);
+
   @override
-  void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
-      returnValueForMissingStub: null);
+  void dispose() => super.noSuchMethod(
+        Invocation.method(
+          #dispose,
+          [],
+        ),
+        returnValueForMissingStub: null,
+      );
 }
 
 /// A class which mocks [Ndk].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockNdk extends _i1.Mock implements _i5.Ndk {
+class MockNdk extends _i1.Mock implements _i6.Ndk {
   @override
-  _i7.Future<_i5.SectionInfo> getTextSectionInfo(String? object) =>
-      (super.noSuchMethod(Invocation.method(#getTextSectionInfo, [object]),
-          returnValue: _i7.Future<_i5.SectionInfo>.value(_FakeSectionInfo_16(
-              this, Invocation.method(#getTextSectionInfo, [object]))),
-          returnValueForMissingStub: _i7.Future<_i5.SectionInfo>.value(
-              _FakeSectionInfo_16(this,
-                  Invocation.method(#getTextSectionInfo, [object])))) as _i7
-          .Future<_i5.SectionInfo>);
+  _i6.LlvmTools get llvmTools => (super.noSuchMethod(
+        Invocation.getter(#llvmTools),
+        returnValue: _FakeLlvmTools_18(
+          this,
+          Invocation.getter(#llvmTools),
+        ),
+        returnValueForMissingStub: _FakeLlvmTools_18(
+          this,
+          Invocation.getter(#llvmTools),
+        ),
+      ) as _i6.LlvmTools);
+
   @override
-  _i7.Future<String> getBuildId(String? object) =>
-      (super.noSuchMethod(Invocation.method(#getBuildId, [object]),
-              returnValue: _i7.Future<String>.value(''),
-              returnValueForMissingStub: _i7.Future<String>.value(''))
-          as _i7.Future<String>);
-  @override
-  _i7.Future<List<String>> symbolize(
-          {String? object, List<String>? addresses, String? arch}) =>
+  _i5.Future<_i6.SectionInfo> getTextSectionInfo(String? object) =>
       (super.noSuchMethod(
-              Invocation.method(#symbolize, [],
-                  {#object: object, #addresses: addresses, #arch: arch}),
-              returnValue: _i7.Future<List<String>>.value(<String>[]),
-              returnValueForMissingStub:
-                  _i7.Future<List<String>>.value(<String>[]))
-          as _i7.Future<List<String>>);
+        Invocation.method(
+          #getTextSectionInfo,
+          [object],
+        ),
+        returnValue: _i5.Future<_i6.SectionInfo>.value(_FakeSectionInfo_19(
+          this,
+          Invocation.method(
+            #getTextSectionInfo,
+            [object],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i6.SectionInfo>.value(_FakeSectionInfo_19(
+          this,
+          Invocation.method(
+            #getTextSectionInfo,
+            [object],
+          ),
+        )),
+      ) as _i5.Future<_i6.SectionInfo>);
+
   @override
-  _i7.Stream<String> objdump({String? object, String? arch}) => (super
-          .noSuchMethod(
-              Invocation.method(#objdump, [], {#object: object, #arch: arch}),
-              returnValue: _i7.Stream<String>.empty(),
-              returnValueForMissingStub: _i7.Stream<String>.empty())
-      as _i7.Stream<String>);
+  _i5.Future<String> getBuildId(String? object) => (super.noSuchMethod(
+        Invocation.method(
+          #getBuildId,
+          [object],
+        ),
+        returnValue: _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getBuildId,
+            [object],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getBuildId,
+            [object],
+          ),
+        )),
+      ) as _i5.Future<String>);
+
+  @override
+  _i5.Future<List<String>> symbolize({
+    required String? object,
+    required List<String>? addresses,
+    String? arch,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #symbolize,
+          [],
+          {
+            #object: object,
+            #addresses: addresses,
+            #arch: arch,
+          },
+        ),
+        returnValue: _i5.Future<List<String>>.value(<String>[]),
+        returnValueForMissingStub: _i5.Future<List<String>>.value(<String>[]),
+      ) as _i5.Future<List<String>>);
+
+  @override
+  _i5.Stream<String> objdump({
+    required String? object,
+    required String? arch,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #objdump,
+          [],
+          {
+            #object: object,
+            #arch: arch,
+          },
+        ),
+        returnValue: _i5.Stream<String>.empty(),
+        returnValueForMissingStub: _i5.Stream<String>.empty(),
+      ) as _i5.Stream<String>);
 }
 
 /// A class which mocks [RepositoriesService].
 ///
 /// See the documentation for Mockito's code generation for more information.
 class MockRepositoriesService extends _i1.Mock
-    implements _i4.RepositoriesService {
+    implements _i3.RepositoriesService {
   @override
-  _i4.GitHub get github => (super.noSuchMethod(Invocation.getter(#github),
-      returnValue: _FakeGitHub_17(this, Invocation.getter(#github)),
-      returnValueForMissingStub:
-          _FakeGitHub_17(this, Invocation.getter(#github))) as _i4.GitHub);
+  _i3.GitHub get github => (super.noSuchMethod(
+        Invocation.getter(#github),
+        returnValue: _FakeGitHub_20(
+          this,
+          Invocation.getter(#github),
+        ),
+        returnValueForMissingStub: _FakeGitHub_20(
+          this,
+          Invocation.getter(#github),
+        ),
+      ) as _i3.GitHub);
+
   @override
-  _i7.Stream<_i4.Repository> listRepositories(
-          {String? type = r'owner',
-          String? sort = r'full_name',
-          String? direction = r'asc'}) =>
+  _i5.Stream<_i3.Repository> listRepositories({
+    String? type = r'owner',
+    String? sort = r'full_name',
+    String? direction = r'asc',
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#listRepositories, [],
-                  {#type: type, #sort: sort, #direction: direction}),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
+        Invocation.method(
+          #listRepositories,
+          [],
+          {
+            #type: type,
+            #sort: sort,
+            #direction: direction,
+          },
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
   @override
-  _i7.Stream<_i4.Repository> listUserRepositories(String? user,
-          {String? type = r'owner',
-          String? sort = r'full_name',
-          String? direction = r'asc'}) =>
+  _i5.Stream<_i3.Repository> listUserRepositories(
+    String? user, {
+    String? type = r'owner',
+    String? sort = r'full_name',
+    String? direction = r'asc',
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#listUserRepositories, [user],
-                  {#type: type, #sort: sort, #direction: direction}),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
+        Invocation.method(
+          #listUserRepositories,
+          [user],
+          {
+            #type: type,
+            #sort: sort,
+            #direction: direction,
+          },
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
   @override
-  _i7.Stream<_i4.Repository> listOrganizationRepositories(String? org,
-          {String? type = r'all'}) =>
+  _i5.Stream<_i3.Repository> listOrganizationRepositories(
+    String? org, {
+    String? type = r'all',
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(
-                  #listOrganizationRepositories, [org], {#type: type}),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
+        Invocation.method(
+          #listOrganizationRepositories,
+          [org],
+          {#type: type},
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
   @override
-  _i7.Stream<_i4.Repository> listPublicRepositories(
-          {int? limit = 50, DateTime? since}) =>
+  _i5.Stream<_i3.Repository> listPublicRepositories({
+    int? limit = 50,
+    DateTime? since,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(
-                  #listPublicRepositories, [], {#limit: limit, #since: since}),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
+        Invocation.method(
+          #listPublicRepositories,
+          [],
+          {
+            #limit: limit,
+            #since: since,
+          },
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
   @override
-  _i7.Future<_i4.Repository> createRepository(_i4.CreateRepository? repository,
-          {String? org}) =>
+  _i5.Future<_i3.Repository> createRepository(
+    _i3.CreateRepository? repository, {
+    String? org,
+  }) =>
       (super.noSuchMethod(
-          Invocation.method(#createRepository, [repository], {#org: org}),
-          returnValue: _i7.Future<_i4.Repository>.value(_FakeRepository_18(this,
-              Invocation.method(#createRepository, [repository], {#org: org}))),
-          returnValueForMissingStub: _i7.Future<_i4.Repository>.value(
-              _FakeRepository_18(this, Invocation.method(#createRepository, [repository], {#org: org})))) as _i7
-          .Future<_i4.Repository>);
+        Invocation.method(
+          #createRepository,
+          [repository],
+          {#org: org},
+        ),
+        returnValue: _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #createRepository,
+            [repository],
+            {#org: org},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #createRepository,
+            [repository],
+            {#org: org},
+          ),
+        )),
+      ) as _i5.Future<_i3.Repository>);
+
   @override
-  _i7.Future<_i4.LicenseDetails> getLicense(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getLicense, [slug]),
-              returnValue: _i7.Future<_i4.LicenseDetails>.value(
-                  _FakeLicenseDetails_19(
-                      this, Invocation.method(#getLicense, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.LicenseDetails>.value(
-                  _FakeLicenseDetails_19(
-                      this, Invocation.method(#getLicense, [slug]))))
-          as _i7.Future<_i4.LicenseDetails>);
-  @override
-  _i7.Future<_i4.Repository> getRepository(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getRepository, [slug]),
-              returnValue: _i7.Future<_i4.Repository>.value(_FakeRepository_18(
-                  this, Invocation.method(#getRepository, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.Repository>.value(
-                  _FakeRepository_18(
-                      this, Invocation.method(#getRepository, [slug]))))
-          as _i7.Future<_i4.Repository>);
-  @override
-  _i7.Stream<_i4.Repository> getRepositories(List<_i4.RepositorySlug>? slugs) =>
-      (super.noSuchMethod(Invocation.method(#getRepositories, [slugs]),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
-  @override
-  _i7.Future<_i4.Repository> editRepository(_i4.RepositorySlug? slug,
-          {String? name,
-          String? description,
-          String? homepage,
-          bool? private,
-          bool? hasIssues,
-          bool? hasWiki,
-          bool? hasDownloads}) =>
+  _i5.Future<_i3.LicenseDetails> getLicense(_i3.RepositorySlug? slug) =>
       (super.noSuchMethod(
-          Invocation.method(#editRepository, [
-            slug
-          ], {
+        Invocation.method(
+          #getLicense,
+          [slug],
+        ),
+        returnValue:
+            _i5.Future<_i3.LicenseDetails>.value(_FakeLicenseDetails_22(
+          this,
+          Invocation.method(
+            #getLicense,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.LicenseDetails>.value(_FakeLicenseDetails_22(
+          this,
+          Invocation.method(
+            #getLicense,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.LicenseDetails>);
+
+  @override
+  _i5.Future<_i3.Repository> getRepository(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getRepository,
+          [slug],
+        ),
+        returnValue: _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #getRepository,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #getRepository,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.Repository>);
+
+  @override
+  _i5.Stream<_i3.Repository> getRepositories(List<_i3.RepositorySlug>? slugs) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getRepositories,
+          [slugs],
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
+  @override
+  _i5.Future<_i3.Repository> editRepository(
+    _i3.RepositorySlug? slug, {
+    String? name,
+    String? description,
+    String? homepage,
+    bool? private,
+    bool? hasIssues,
+    bool? hasWiki,
+    bool? hasDownloads,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editRepository,
+          [slug],
+          {
             #name: name,
             #description: description,
             #homepage: homepage,
             #private: private,
             #hasIssues: hasIssues,
             #hasWiki: hasWiki,
-            #hasDownloads: hasDownloads
-          }),
-          returnValue: _i7.Future<_i4.Repository>.value(_FakeRepository_18(
-              this,
-              Invocation.method(#editRepository, [
-                slug
-              ], {
-                #name: name,
-                #description: description,
-                #homepage: homepage,
-                #private: private,
-                #hasIssues: hasIssues,
-                #hasWiki: hasWiki,
-                #hasDownloads: hasDownloads
-              }))),
-          returnValueForMissingStub:
-              _i7.Future<_i4.Repository>.value(_FakeRepository_18(
-                  this,
-                  Invocation.method(#editRepository, [
-                    slug
-                  ], {
-                    #name: name,
-                    #description: description,
-                    #homepage: homepage,
-                    #private: private,
-                    #hasIssues: hasIssues,
-                    #hasWiki: hasWiki,
-                    #hasDownloads: hasDownloads
-                  })))) as _i7.Future<_i4.Repository>);
+            #hasDownloads: hasDownloads,
+          },
+        ),
+        returnValue: _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #editRepository,
+            [slug],
+            {
+              #name: name,
+              #description: description,
+              #homepage: homepage,
+              #private: private,
+              #hasIssues: hasIssues,
+              #hasWiki: hasWiki,
+              #hasDownloads: hasDownloads,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #editRepository,
+            [slug],
+            {
+              #name: name,
+              #description: description,
+              #homepage: homepage,
+              #private: private,
+              #hasIssues: hasIssues,
+              #hasWiki: hasWiki,
+              #hasDownloads: hasDownloads,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.Repository>);
+
   @override
-  _i7.Future<bool> deleteRepository(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#deleteRepository, [slug]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Stream<_i4.Contributor> listContributors(_i4.RepositorySlug? slug,
-          {bool? anon = false}) =>
+  _i5.Future<bool> deleteRepository(_i3.RepositorySlug? slug) =>
       (super.noSuchMethod(
-              Invocation.method(#listContributors, [slug], {#anon: anon}),
-              returnValue: _i7.Stream<_i4.Contributor>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Contributor>.empty())
-          as _i7.Stream<_i4.Contributor>);
+        Invocation.method(
+          #deleteRepository,
+          [slug],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
   @override
-  _i7.Stream<_i4.Team> listTeams(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listTeams, [slug]),
-              returnValue: _i7.Stream<_i4.Team>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Team>.empty())
-          as _i7.Stream<_i4.Team>);
-  @override
-  _i7.Future<_i4.LanguageBreakdown> listLanguages(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listLanguages, [slug]),
-          returnValue: _i7.Future<_i4.LanguageBreakdown>.value(
-              _FakeLanguageBreakdown_20(
-                  this, Invocation.method(#listLanguages, [slug]))),
-          returnValueForMissingStub: _i7.Future<_i4.LanguageBreakdown>.value(
-              _FakeLanguageBreakdown_20(
-                  this, Invocation.method(#listLanguages, [slug])))) as _i7
-          .Future<_i4.LanguageBreakdown>);
-  @override
-  _i7.Stream<_i4.Tag> listTags(_i4.RepositorySlug? slug,
-          {int? page = 1, int? pages, int? perPage = 30}) =>
+  _i5.Stream<_i3.Contributor> listContributors(
+    _i3.RepositorySlug? slug, {
+    bool? anon = false,
+  }) =>
       (super.noSuchMethod(
-              Invocation.method(#listTags, [slug],
-                  {#page: page, #pages: pages, #perPage: perPage}),
-              returnValue: _i7.Stream<_i4.Tag>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Tag>.empty())
-          as _i7.Stream<_i4.Tag>);
+        Invocation.method(
+          #listContributors,
+          [slug],
+          {#anon: anon},
+        ),
+        returnValue: _i5.Stream<_i3.Contributor>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Contributor>.empty(),
+      ) as _i5.Stream<_i3.Contributor>);
+
   @override
-  _i7.Stream<_i4.Branch> listBranches(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listBranches, [slug]),
-              returnValue: _i7.Stream<_i4.Branch>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Branch>.empty())
-          as _i7.Stream<_i4.Branch>);
-  @override
-  _i7.Future<_i4.Branch> getBranch(_i4.RepositorySlug? slug, String? branch) =>
-      (super.noSuchMethod(Invocation.method(#getBranch, [slug, branch]),
-              returnValue: _i7.Future<_i4.Branch>.value(_FakeBranch_21(
-                  this, Invocation.method(#getBranch, [slug, branch]))),
-              returnValueForMissingStub: _i7.Future<_i4.Branch>.value(
-                  _FakeBranch_21(
-                      this, Invocation.method(#getBranch, [slug, branch]))))
-          as _i7.Future<_i4.Branch>);
-  @override
-  _i7.Stream<_i4.Collaborator> listCollaborators(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCollaborators, [slug]),
-              returnValue: _i7.Stream<_i4.Collaborator>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Collaborator>.empty())
-          as _i7.Stream<_i4.Collaborator>);
-  @override
-  _i7.Future<bool> isCollaborator(_i4.RepositorySlug? slug, String? user) =>
-      (super.noSuchMethod(Invocation.method(#isCollaborator, [slug, user]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<bool> addCollaborator(_i4.RepositorySlug? slug, String? user) =>
-      (super.noSuchMethod(Invocation.method(#addCollaborator, [slug, user]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<bool> removeCollaborator(_i4.RepositorySlug? slug, String? user) =>
-      (super.noSuchMethod(Invocation.method(#removeCollaborator, [slug, user]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Stream<_i4.CommitComment> listSingleCommitComments(
-          _i4.RepositorySlug? slug, _i4.RepositoryCommit? commit) =>
+  _i5.Stream<_i3.Team> listTeams(_i3.RepositorySlug? slug) =>
       (super.noSuchMethod(
-              Invocation.method(#listSingleCommitComments, [slug, commit]),
-              returnValue: _i7.Stream<_i4.CommitComment>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.CommitComment>.empty())
-          as _i7.Stream<_i4.CommitComment>);
+        Invocation.method(
+          #listTeams,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Team>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Team>.empty(),
+      ) as _i5.Stream<_i3.Team>);
+
   @override
-  _i7.Stream<_i4.CommitComment> listCommitComments(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCommitComments, [slug]),
-              returnValue: _i7.Stream<_i4.CommitComment>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.CommitComment>.empty())
-          as _i7.Stream<_i4.CommitComment>);
-  @override
-  _i7.Future<_i4.CommitComment> createCommitComment(
-          _i4.RepositorySlug? slug, _i4.RepositoryCommit? commit,
-          {String? body, String? path, int? position, int? line}) =>
-      (super.noSuchMethod(Invocation.method(#createCommitComment, [slug, commit], {#body: body, #path: path, #position: position, #line: line}),
-              returnValue: _i7.Future<_i4.CommitComment>.value(_FakeCommitComment_22(
-                  this,
-                  Invocation.method(#createCommitComment, [
-                    slug,
-                    commit
-                  ], {
-                    #body: body,
-                    #path: path,
-                    #position: position,
-                    #line: line
-                  }))),
-              returnValueForMissingStub: _i7.Future<_i4.CommitComment>.value(_FakeCommitComment_22(this, Invocation.method(#createCommitComment, [slug, commit], {#body: body, #path: path, #position: position, #line: line}))))
-          as _i7.Future<_i4.CommitComment>);
-  @override
-  _i7.Future<_i4.CommitComment> getCommitComment(_i4.RepositorySlug? slug,
-          {int? id}) =>
-      (super.noSuchMethod(Invocation.method(#getCommitComment, [slug], {#id: id}),
-              returnValue: _i7.Future<_i4.CommitComment>.value(_FakeCommitComment_22(
-                  this, Invocation.method(#getCommitComment, [slug], {#id: id}))),
-              returnValueForMissingStub: _i7.Future<_i4.CommitComment>.value(
-                  _FakeCommitComment_22(
-                      this, Invocation.method(#getCommitComment, [slug], {#id: id}))))
-          as _i7.Future<_i4.CommitComment>);
-  @override
-  _i7.Future<_i4.CommitComment> updateCommitComment(_i4.RepositorySlug? slug,
-          {int? id, String? body}) =>
-      (super.noSuchMethod(Invocation.method(#updateCommitComment, [slug], {#id: id, #body: body}),
-              returnValue: _i7.Future<_i4.CommitComment>.value(
-                  _FakeCommitComment_22(
-                      this,
-                      Invocation.method(
-                          #updateCommitComment, [slug], {#id: id, #body: body}))),
-              returnValueForMissingStub: _i7.Future<_i4.CommitComment>.value(
-                  _FakeCommitComment_22(this, Invocation.method(#updateCommitComment, [slug], {#id: id, #body: body}))))
-          as _i7.Future<_i4.CommitComment>);
-  @override
-  _i7.Future<bool> deleteCommitComment(_i4.RepositorySlug? slug, {int? id}) =>
+  _i5.Future<_i3.LanguageBreakdown> listLanguages(_i3.RepositorySlug? slug) =>
       (super.noSuchMethod(
-              Invocation.method(#deleteCommitComment, [slug], {#id: id}),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
+        Invocation.method(
+          #listLanguages,
+          [slug],
+        ),
+        returnValue:
+            _i5.Future<_i3.LanguageBreakdown>.value(_FakeLanguageBreakdown_23(
+          this,
+          Invocation.method(
+            #listLanguages,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.LanguageBreakdown>.value(_FakeLanguageBreakdown_23(
+          this,
+          Invocation.method(
+            #listLanguages,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.LanguageBreakdown>);
+
   @override
-  _i7.Stream<_i4.RepositoryCommit> listCommits(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCommits, [slug]),
-              returnValue: _i7.Stream<_i4.RepositoryCommit>.empty(),
-              returnValueForMissingStub:
-                  _i7.Stream<_i4.RepositoryCommit>.empty())
-          as _i7.Stream<_i4.RepositoryCommit>);
-  @override
-  _i7.Future<_i4.RepositoryCommit> getCommit(_i4.RepositorySlug? slug, String? sha) =>
-      (super.noSuchMethod(Invocation.method(#getCommit, [slug, sha]),
-              returnValue: _i7.Future<_i4.RepositoryCommit>.value(
-                  _FakeRepositoryCommit_23(
-                      this, Invocation.method(#getCommit, [slug, sha]))),
-              returnValueForMissingStub: _i7.Future<_i4.RepositoryCommit>.value(
-                  _FakeRepositoryCommit_23(
-                      this, Invocation.method(#getCommit, [slug, sha]))))
-          as _i7.Future<_i4.RepositoryCommit>);
-  @override
-  _i7.Future<String> getCommitDiff(_i4.RepositorySlug? slug, String? sha) =>
-      (super.noSuchMethod(Invocation.method(#getCommitDiff, [slug, sha]),
-              returnValue: _i7.Future<String>.value(''),
-              returnValueForMissingStub: _i7.Future<String>.value(''))
-          as _i7.Future<String>);
-  @override
-  _i7.Future<_i4.GitHubComparison> compareCommits(
-          _i4.RepositorySlug? slug, String? refBase, String? refHead) =>
+  _i5.Stream<_i3.Tag> listTags(
+    _i3.RepositorySlug? slug, {
+    int? page = 1,
+    int? pages,
+    int? perPage = 30,
+  }) =>
       (super.noSuchMethod(
-          Invocation.method(#compareCommits, [slug, refBase, refHead]),
-          returnValue: _i7.Future<_i4.GitHubComparison>.value(_FakeGitHubComparison_24(
-              this,
-              Invocation.method(#compareCommits, [slug, refBase, refHead]))),
-          returnValueForMissingStub: _i7.Future<_i4.GitHubComparison>.value(
-              _FakeGitHubComparison_24(this, Invocation.method(#compareCommits, [slug, refBase, refHead])))) as _i7
-          .Future<_i4.GitHubComparison>);
+        Invocation.method(
+          #listTags,
+          [slug],
+          {
+            #page: page,
+            #pages: pages,
+            #perPage: perPage,
+          },
+        ),
+        returnValue: _i5.Stream<_i3.Tag>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Tag>.empty(),
+      ) as _i5.Stream<_i3.Tag>);
+
   @override
-  _i7.Future<_i4.GitHubFile> getReadme(_i4.RepositorySlug? slug,
-          {String? ref}) =>
-      (super.noSuchMethod(Invocation.method(#getReadme, [slug], {#ref: ref}),
-              returnValue: _i7.Future<_i4.GitHubFile>.value(_FakeGitHubFile_25(
-                  this, Invocation.method(#getReadme, [slug], {#ref: ref}))),
-              returnValueForMissingStub: _i7.Future<_i4.GitHubFile>.value(
-                  _FakeGitHubFile_25(this,
-                      Invocation.method(#getReadme, [slug], {#ref: ref}))))
-          as _i7.Future<_i4.GitHubFile>);
-  @override
-  _i7.Future<_i4.RepositoryContents> getContents(
-          _i4.RepositorySlug? slug, String? path, {String? ref}) =>
+  _i5.Stream<_i3.Branch> listBranches(_i3.RepositorySlug? slug) =>
       (super.noSuchMethod(
-              Invocation.method(#getContents, [slug, path], {#ref: ref}),
-              returnValue: _i7.Future<_i4.RepositoryContents>.value(
-                  _FakeRepositoryContents_26(this,
-                      Invocation.method(#getContents, [slug, path], {#ref: ref}))),
-              returnValueForMissingStub: _i7.Future<_i4.RepositoryContents>.value(
-                  _FakeRepositoryContents_26(this, Invocation.method(#getContents, [slug, path], {#ref: ref}))))
-          as _i7.Future<_i4.RepositoryContents>);
+        Invocation.method(
+          #listBranches,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Branch>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Branch>.empty(),
+      ) as _i5.Stream<_i3.Branch>);
+
   @override
-  _i7.Future<_i4.ContentCreation> createFile(
-          _i4.RepositorySlug? slug, _i4.CreateFile? file) =>
-      (super.noSuchMethod(Invocation.method(#createFile, [slug, file]),
-              returnValue: _i7.Future<_i4.ContentCreation>.value(_FakeContentCreation_27(
-                  this, Invocation.method(#createFile, [slug, file]))),
-              returnValueForMissingStub: _i7.Future<_i4.ContentCreation>.value(
-                  _FakeContentCreation_27(
-                      this, Invocation.method(#createFile, [slug, file]))))
-          as _i7.Future<_i4.ContentCreation>);
-  @override
-  _i7.Future<_i4.ContentCreation> updateFile(
-          _i4.RepositorySlug? slug, String? path, String? message, String? content, String? sha,
-          {String? branch}) =>
-      (super.noSuchMethod(Invocation.method(#updateFile, [slug, path, message, content, sha], {#branch: branch}),
-              returnValue: _i7.Future<_i4.ContentCreation>.value(_FakeContentCreation_27(
-                  this,
-                  Invocation.method(#updateFile,
-                      [slug, path, message, content, sha], {#branch: branch}))),
-              returnValueForMissingStub: _i7.Future<_i4.ContentCreation>.value(_FakeContentCreation_27(this, Invocation.method(#updateFile, [slug, path, message, content, sha], {#branch: branch}))))
-          as _i7.Future<_i4.ContentCreation>);
-  @override
-  _i7.Future<_i4.ContentCreation> deleteFile(_i4.RepositorySlug? slug,
-          String? path, String? message, String? sha, String? branch) =>
-      (super.noSuchMethod(Invocation.method(#deleteFile, [slug, path, message, sha, branch]),
-              returnValue: _i7.Future<_i4.ContentCreation>.value(_FakeContentCreation_27(
-                  this,
-                  Invocation.method(
-                      #deleteFile, [slug, path, message, sha, branch]))),
-              returnValueForMissingStub: _i7.Future<_i4.ContentCreation>.value(
-                  _FakeContentCreation_27(this, Invocation.method(#deleteFile, [slug, path, message, sha, branch]))))
-          as _i7.Future<_i4.ContentCreation>);
-  @override
-  _i7.Future<String?> getArchiveLink(_i4.RepositorySlug? slug, String? ref,
-          {String? format = r'tarball'}) =>
+  _i5.Future<_i3.Branch> getBranch(
+    _i3.RepositorySlug? slug,
+    String? branch,
+  ) =>
       (super.noSuchMethod(
-          Invocation.method(#getArchiveLink, [slug, ref], {#format: format}),
-          returnValue: _i7.Future<String?>.value(),
-          returnValueForMissingStub:
-              _i7.Future<String?>.value()) as _i7.Future<String?>);
-  @override
-  _i7.Stream<_i4.Repository> listForks(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listForks, [slug]),
-              returnValue: _i7.Stream<_i4.Repository>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Repository>.empty())
-          as _i7.Stream<_i4.Repository>);
-  @override
-  _i7.Future<_i4.Repository> createFork(_i4.RepositorySlug? slug,
-          [_i4.CreateFork? fork]) =>
-      (super.noSuchMethod(Invocation.method(#createFork, [slug, fork]),
-              returnValue: _i7.Future<_i4.Repository>.value(_FakeRepository_18(
-                  this, Invocation.method(#createFork, [slug, fork]))),
-              returnValueForMissingStub: _i7.Future<_i4.Repository>.value(
-                  _FakeRepository_18(
-                      this, Invocation.method(#createFork, [slug, fork]))))
-          as _i7.Future<_i4.Repository>);
-  @override
-  _i7.Stream<_i4.Hook> listHooks(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listHooks, [slug]),
-              returnValue: _i7.Stream<_i4.Hook>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Hook>.empty())
-          as _i7.Stream<_i4.Hook>);
-  @override
-  _i7.Future<_i4.Hook> getHook(_i4.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#getHook, [slug, id]),
-              returnValue: _i7.Future<_i4.Hook>.value(
-                  _FakeHook_28(this, Invocation.method(#getHook, [slug, id]))),
-              returnValueForMissingStub: _i7.Future<_i4.Hook>.value(
-                  _FakeHook_28(this, Invocation.method(#getHook, [slug, id]))))
-          as _i7.Future<_i4.Hook>);
-  @override
-  _i7.Future<_i4.Hook> createHook(
-          _i4.RepositorySlug? slug, _i4.CreateHook? hook) =>
-      (super.noSuchMethod(Invocation.method(#createHook, [slug, hook]),
-          returnValue: _i7.Future<_i4.Hook>.value(
-              _FakeHook_28(this, Invocation.method(#createHook, [slug, hook]))),
-          returnValueForMissingStub: _i7.Future<_i4.Hook>.value(_FakeHook_28(
-              this, Invocation.method(#createHook, [slug, hook])))) as _i7
-          .Future<_i4.Hook>);
-  @override
-  _i7.Future<_i4.Hook> editHook(_i4.RepositorySlug? slug, _i4.Hook? hookToEdit,
-          {String? configUrl,
-          String? configContentType,
-          String? configSecret,
-          bool? configInsecureSsl,
-          List<String>? events,
-          List<String>? addEvents,
-          List<String>? removeEvents,
-          bool? active}) =>
-      (super.noSuchMethod(
-          Invocation.method(#editHook, [
+        Invocation.method(
+          #getBranch,
+          [
             slug,
-            hookToEdit
-          ], {
+            branch,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Branch>.value(_FakeBranch_24(
+          this,
+          Invocation.method(
+            #getBranch,
+            [
+              slug,
+              branch,
+            ],
+          ),
+        )),
+        returnValueForMissingStub: _i5.Future<_i3.Branch>.value(_FakeBranch_24(
+          this,
+          Invocation.method(
+            #getBranch,
+            [
+              slug,
+              branch,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Branch>);
+
+  @override
+  _i5.Stream<_i3.Collaborator> listCollaborators(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCollaborators,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Collaborator>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Collaborator>.empty(),
+      ) as _i5.Stream<_i3.Collaborator>);
+
+  @override
+  _i5.Future<bool> isCollaborator(
+    _i3.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #isCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<bool> addCollaborator(
+    _i3.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #addCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<bool> removeCollaborator(
+    _i3.RepositorySlug? slug,
+    String? user,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #removeCollaborator,
+          [
+            slug,
+            user,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Stream<_i3.CommitComment> listSingleCommitComments(
+    _i3.RepositorySlug? slug,
+    _i3.RepositoryCommit? commit,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listSingleCommitComments,
+          [
+            slug,
+            commit,
+          ],
+        ),
+        returnValue: _i5.Stream<_i3.CommitComment>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.CommitComment>.empty(),
+      ) as _i5.Stream<_i3.CommitComment>);
+
+  @override
+  _i5.Stream<_i3.CommitComment> listCommitComments(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommitComments,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.CommitComment>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.CommitComment>.empty(),
+      ) as _i5.Stream<_i3.CommitComment>);
+
+  @override
+  _i5.Future<_i3.CommitComment> createCommitComment(
+    _i3.RepositorySlug? slug,
+    _i3.RepositoryCommit? commit, {
+    required String? body,
+    String? path,
+    int? position,
+    int? line,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createCommitComment,
+          [
+            slug,
+            commit,
+          ],
+          {
+            #body: body,
+            #path: path,
+            #position: position,
+            #line: line,
+          },
+        ),
+        returnValue: _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #createCommitComment,
+            [
+              slug,
+              commit,
+            ],
+            {
+              #body: body,
+              #path: path,
+              #position: position,
+              #line: line,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #createCommitComment,
+            [
+              slug,
+              commit,
+            ],
+            {
+              #body: body,
+              #path: path,
+              #position: position,
+              #line: line,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.CommitComment>);
+
+  @override
+  _i5.Future<_i3.CommitComment> getCommitComment(
+    _i3.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommitComment,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #getCommitComment,
+            [slug],
+            {#id: id},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #getCommitComment,
+            [slug],
+            {#id: id},
+          ),
+        )),
+      ) as _i5.Future<_i3.CommitComment>);
+
+  @override
+  _i5.Future<_i3.CommitComment> updateCommitComment(
+    _i3.RepositorySlug? slug, {
+    required int? id,
+    required String? body,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateCommitComment,
+          [slug],
+          {
+            #id: id,
+            #body: body,
+          },
+        ),
+        returnValue: _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #updateCommitComment,
+            [slug],
+            {
+              #id: id,
+              #body: body,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.CommitComment>.value(_FakeCommitComment_25(
+          this,
+          Invocation.method(
+            #updateCommitComment,
+            [slug],
+            {
+              #id: id,
+              #body: body,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.CommitComment>);
+
+  @override
+  _i5.Future<bool> deleteCommitComment(
+    _i3.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteCommitComment,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Stream<_i3.RepositoryCommit> listCommits(
+    _i3.RepositorySlug? slug, {
+    String? sha,
+    String? path,
+    String? author,
+    String? committer,
+    DateTime? since,
+    DateTime? until,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommits,
+          [slug],
+          {
+            #sha: sha,
+            #path: path,
+            #author: author,
+            #committer: committer,
+            #since: since,
+            #until: until,
+          },
+        ),
+        returnValue: _i5.Stream<_i3.RepositoryCommit>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.RepositoryCommit>.empty(),
+      ) as _i5.Stream<_i3.RepositoryCommit>);
+
+  @override
+  _i5.Future<_i3.RepositoryCommit> getCommit(
+    _i3.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommit,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.RepositoryCommit>.value(_FakeRepositoryCommit_26(
+          this,
+          Invocation.method(
+            #getCommit,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.RepositoryCommit>.value(_FakeRepositoryCommit_26(
+          this,
+          Invocation.method(
+            #getCommit,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.RepositoryCommit>);
+
+  @override
+  _i5.Future<String> getCommitDiff(
+    _i3.RepositorySlug? slug,
+    String? sha,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCommitDiff,
+          [
+            slug,
+            sha,
+          ],
+        ),
+        returnValue: _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getCommitDiff,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<String>.value(_i8.dummyValue<String>(
+          this,
+          Invocation.method(
+            #getCommitDiff,
+            [
+              slug,
+              sha,
+            ],
+          ),
+        )),
+      ) as _i5.Future<String>);
+
+  @override
+  _i5.Future<_i3.GitHubComparison> compareCommits(
+    _i3.RepositorySlug? slug,
+    String? refBase,
+    String? refHead,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #compareCommits,
+          [
+            slug,
+            refBase,
+            refHead,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.GitHubComparison>.value(_FakeGitHubComparison_27(
+          this,
+          Invocation.method(
+            #compareCommits,
+            [
+              slug,
+              refBase,
+              refHead,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.GitHubComparison>.value(_FakeGitHubComparison_27(
+          this,
+          Invocation.method(
+            #compareCommits,
+            [
+              slug,
+              refBase,
+              refHead,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.GitHubComparison>);
+
+  @override
+  _i5.Future<_i3.GitHubFile> getReadme(
+    _i3.RepositorySlug? slug, {
+    String? ref,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReadme,
+          [slug],
+          {#ref: ref},
+        ),
+        returnValue: _i5.Future<_i3.GitHubFile>.value(_FakeGitHubFile_28(
+          this,
+          Invocation.method(
+            #getReadme,
+            [slug],
+            {#ref: ref},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.GitHubFile>.value(_FakeGitHubFile_28(
+          this,
+          Invocation.method(
+            #getReadme,
+            [slug],
+            {#ref: ref},
+          ),
+        )),
+      ) as _i5.Future<_i3.GitHubFile>);
+
+  @override
+  _i5.Future<_i3.RepositoryContents> getContents(
+    _i3.RepositorySlug? slug,
+    String? path, {
+    String? ref,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getContents,
+          [
+            slug,
+            path,
+          ],
+          {#ref: ref},
+        ),
+        returnValue:
+            _i5.Future<_i3.RepositoryContents>.value(_FakeRepositoryContents_29(
+          this,
+          Invocation.method(
+            #getContents,
+            [
+              slug,
+              path,
+            ],
+            {#ref: ref},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.RepositoryContents>.value(_FakeRepositoryContents_29(
+          this,
+          Invocation.method(
+            #getContents,
+            [
+              slug,
+              path,
+            ],
+            {#ref: ref},
+          ),
+        )),
+      ) as _i5.Future<_i3.RepositoryContents>);
+
+  @override
+  _i5.Future<_i3.ContentCreation> createFile(
+    _i3.RepositorySlug? slug,
+    _i3.CreateFile? file,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createFile,
+          [
+            slug,
+            file,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #createFile,
+            [
+              slug,
+              file,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #createFile,
+            [
+              slug,
+              file,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.ContentCreation>);
+
+  @override
+  _i5.Future<_i3.ContentCreation> updateFile(
+    _i3.RepositorySlug? slug,
+    String? path,
+    String? message,
+    String? content,
+    String? sha, {
+    String? branch,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #updateFile,
+          [
+            slug,
+            path,
+            message,
+            content,
+            sha,
+          ],
+          {#branch: branch},
+        ),
+        returnValue:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #updateFile,
+            [
+              slug,
+              path,
+              message,
+              content,
+              sha,
+            ],
+            {#branch: branch},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #updateFile,
+            [
+              slug,
+              path,
+              message,
+              content,
+              sha,
+            ],
+            {#branch: branch},
+          ),
+        )),
+      ) as _i5.Future<_i3.ContentCreation>);
+
+  @override
+  _i5.Future<_i3.ContentCreation> deleteFile(
+    _i3.RepositorySlug? slug,
+    String? path,
+    String? message,
+    String? sha,
+    String? branch,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteFile,
+          [
+            slug,
+            path,
+            message,
+            sha,
+            branch,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #deleteFile,
+            [
+              slug,
+              path,
+              message,
+              sha,
+              branch,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ContentCreation>.value(_FakeContentCreation_30(
+          this,
+          Invocation.method(
+            #deleteFile,
+            [
+              slug,
+              path,
+              message,
+              sha,
+              branch,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.ContentCreation>);
+
+  @override
+  _i5.Future<String?> getArchiveLink(
+    _i3.RepositorySlug? slug,
+    String? ref, {
+    String? format = r'tarball',
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getArchiveLink,
+          [
+            slug,
+            ref,
+          ],
+          {#format: format},
+        ),
+        returnValue: _i5.Future<String?>.value(),
+        returnValueForMissingStub: _i5.Future<String?>.value(),
+      ) as _i5.Future<String?>);
+
+  @override
+  _i5.Stream<_i3.Repository> listForks(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listForks,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Repository>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Repository>.empty(),
+      ) as _i5.Stream<_i3.Repository>);
+
+  @override
+  _i5.Future<_i3.Repository> createFork(
+    _i3.RepositorySlug? slug, [
+    _i3.CreateFork? fork,
+  ]) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createFork,
+          [
+            slug,
+            fork,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #createFork,
+            [
+              slug,
+              fork,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Repository>.value(_FakeRepository_21(
+          this,
+          Invocation.method(
+            #createFork,
+            [
+              slug,
+              fork,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Repository>);
+
+  @override
+  _i5.Stream<_i3.Hook> listHooks(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listHooks,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Hook>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Hook>.empty(),
+      ) as _i5.Stream<_i3.Hook>);
+
+  @override
+  _i5.Future<_i3.Hook> getHook(
+    _i3.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #getHook,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+        returnValueForMissingStub: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #getHook,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Hook>);
+
+  @override
+  _i5.Future<_i3.Hook> createHook(
+    _i3.RepositorySlug? slug,
+    _i3.CreateHook? hook,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createHook,
+          [
+            slug,
+            hook,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #createHook,
+            [
+              slug,
+              hook,
+            ],
+          ),
+        )),
+        returnValueForMissingStub: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #createHook,
+            [
+              slug,
+              hook,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Hook>);
+
+  @override
+  _i5.Future<_i3.Hook> editHook(
+    _i3.RepositorySlug? slug,
+    _i3.Hook? hookToEdit, {
+    String? configUrl,
+    String? configContentType,
+    String? configSecret,
+    bool? configInsecureSsl,
+    List<String>? events,
+    List<String>? addEvents,
+    List<String>? removeEvents,
+    bool? active,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editHook,
+          [
+            slug,
+            hookToEdit,
+          ],
+          {
             #configUrl: configUrl,
             #configContentType: configContentType,
             #configSecret: configSecret,
@@ -1005,403 +2596,967 @@
             #events: events,
             #addEvents: addEvents,
             #removeEvents: removeEvents,
-            #active: active
-          }),
-          returnValue: _i7.Future<_i4.Hook>.value(_FakeHook_28(
-              this,
-              Invocation.method(#editHook, [
-                slug,
-                hookToEdit
-              ], {
-                #configUrl: configUrl,
-                #configContentType: configContentType,
-                #configSecret: configSecret,
-                #configInsecureSsl: configInsecureSsl,
-                #events: events,
-                #addEvents: addEvents,
-                #removeEvents: removeEvents,
-                #active: active
-              }))),
-          returnValueForMissingStub: _i7.Future<_i4.Hook>.value(_FakeHook_28(
-              this,
-              Invocation.method(#editHook, [
-                slug,
-                hookToEdit
-              ], {
-                #configUrl: configUrl,
-                #configContentType: configContentType,
-                #configSecret: configSecret,
-                #configInsecureSsl: configInsecureSsl,
-                #events: events,
-                #addEvents: addEvents,
-                #removeEvents: removeEvents,
-                #active: active
-              })))) as _i7.Future<_i4.Hook>);
+            #active: active,
+          },
+        ),
+        returnValue: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #editHook,
+            [
+              slug,
+              hookToEdit,
+            ],
+            {
+              #configUrl: configUrl,
+              #configContentType: configContentType,
+              #configSecret: configSecret,
+              #configInsecureSsl: configInsecureSsl,
+              #events: events,
+              #addEvents: addEvents,
+              #removeEvents: removeEvents,
+              #active: active,
+            },
+          ),
+        )),
+        returnValueForMissingStub: _i5.Future<_i3.Hook>.value(_FakeHook_31(
+          this,
+          Invocation.method(
+            #editHook,
+            [
+              slug,
+              hookToEdit,
+            ],
+            {
+              #configUrl: configUrl,
+              #configContentType: configContentType,
+              #configSecret: configSecret,
+              #configInsecureSsl: configInsecureSsl,
+              #events: events,
+              #addEvents: addEvents,
+              #removeEvents: removeEvents,
+              #active: active,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.Hook>);
+
   @override
-  _i7.Future<bool> testPushHook(_i4.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#testPushHook, [slug, id]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<bool> pingHook(_i4.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#pingHook, [slug, id]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<bool> deleteHook(_i4.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#deleteHook, [slug, id]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Stream<_i4.PublicKey> listDeployKeys(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listDeployKeys, [slug]),
-              returnValue: _i7.Stream<_i4.PublicKey>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.PublicKey>.empty())
-          as _i7.Stream<_i4.PublicKey>);
-  @override
-  _i7.Future<_i4.PublicKey> getDeployKey(_i4.RepositorySlug? slug, {int? id}) =>
-      (super.noSuchMethod(Invocation.method(#getDeployKey, [slug], {#id: id}),
-              returnValue: _i7.Future<_i4.PublicKey>.value(_FakePublicKey_29(
-                  this, Invocation.method(#getDeployKey, [slug], {#id: id}))),
-              returnValueForMissingStub: _i7.Future<_i4.PublicKey>.value(
-                  _FakePublicKey_29(this,
-                      Invocation.method(#getDeployKey, [slug], {#id: id}))))
-          as _i7.Future<_i4.PublicKey>);
-  @override
-  _i7.Future<_i4.PublicKey> createDeployKey(
-          _i4.RepositorySlug? slug, _i4.CreatePublicKey? key) =>
-      (super.noSuchMethod(Invocation.method(#createDeployKey, [slug, key]),
-              returnValue: _i7.Future<_i4.PublicKey>.value(_FakePublicKey_29(
-                  this, Invocation.method(#createDeployKey, [slug, key]))),
-              returnValueForMissingStub: _i7.Future<_i4.PublicKey>.value(
-                  _FakePublicKey_29(
-                      this, Invocation.method(#createDeployKey, [slug, key]))))
-          as _i7.Future<_i4.PublicKey>);
-  @override
-  _i7.Future<bool> deleteDeployKey(
-          {_i4.RepositorySlug? slug, _i4.PublicKey? key}) =>
+  _i5.Future<bool> testPushHook(
+    _i3.RepositorySlug? slug,
+    int? id,
+  ) =>
       (super.noSuchMethod(
-              Invocation.method(#deleteDeployKey, [], {#slug: slug, #key: key}),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<_i4.RepositoryCommit> merge(
-          _i4.RepositorySlug? slug, _i4.CreateMerge? merge) =>
-      (super.noSuchMethod(Invocation.method(#merge, [slug, merge]),
-              returnValue: _i7.Future<_i4.RepositoryCommit>.value(_FakeRepositoryCommit_23(
-                  this, Invocation.method(#merge, [slug, merge]))),
-              returnValueForMissingStub: _i7.Future<_i4.RepositoryCommit>.value(
-                  _FakeRepositoryCommit_23(
-                      this, Invocation.method(#merge, [slug, merge]))))
-          as _i7.Future<_i4.RepositoryCommit>);
-  @override
-  _i7.Future<_i4.RepositoryPages> getPagesInfo(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getPagesInfo, [slug]),
-              returnValue: _i7.Future<_i4.RepositoryPages>.value(
-                  _FakeRepositoryPages_30(
-                      this, Invocation.method(#getPagesInfo, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.RepositoryPages>.value(
-                  _FakeRepositoryPages_30(
-                      this, Invocation.method(#getPagesInfo, [slug]))))
-          as _i7.Future<_i4.RepositoryPages>);
-  @override
-  _i7.Stream<_i4.PageBuild> listPagesBuilds(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listPagesBuilds, [slug]),
-              returnValue: _i7.Stream<_i4.PageBuild>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.PageBuild>.empty())
-          as _i7.Stream<_i4.PageBuild>);
-  @override
-  _i7.Future<_i4.PageBuild> getLatestPagesBuild(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getLatestPagesBuild, [slug]),
-              returnValue: _i7.Future<_i4.PageBuild>.value(_FakePageBuild_31(
-                  this, Invocation.method(#getLatestPagesBuild, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.PageBuild>.value(
-                  _FakePageBuild_31(
-                      this, Invocation.method(#getLatestPagesBuild, [slug]))))
-          as _i7.Future<_i4.PageBuild>);
-  @override
-  _i7.Stream<_i4.Release> listReleases(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listReleases, [slug]),
-              returnValue: _i7.Stream<_i4.Release>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.Release>.empty())
-          as _i7.Stream<_i4.Release>);
-  @override
-  _i7.Future<_i4.Release> getLatestRelease(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getLatestRelease, [slug]),
-              returnValue: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-                  this, Invocation.method(#getLatestRelease, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.Release>.value(
-                  _FakeRelease_32(
-                      this, Invocation.method(#getLatestRelease, [slug]))))
-          as _i7.Future<_i4.Release>);
-  @override
-  _i7.Future<_i4.Release> getReleaseById(_i4.RepositorySlug? slug, int? id) =>
-      (super.noSuchMethod(Invocation.method(#getReleaseById, [slug, id]),
-              returnValue: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-                  this, Invocation.method(#getReleaseById, [slug, id]))),
-              returnValueForMissingStub: _i7.Future<_i4.Release>.value(
-                  _FakeRelease_32(
-                      this, Invocation.method(#getReleaseById, [slug, id]))))
-          as _i7.Future<_i4.Release>);
-  @override
-  _i7.Future<_i4.Release> getReleaseByTagName(
-          _i4.RepositorySlug? slug, String? tagName) =>
-      (super.noSuchMethod(
-          Invocation.method(#getReleaseByTagName, [slug, tagName]),
-          returnValue: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-              this, Invocation.method(#getReleaseByTagName, [slug, tagName]))),
-          returnValueForMissingStub: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-              this, Invocation.method(#getReleaseByTagName, [slug, tagName])))) as _i7
-          .Future<_i4.Release>);
-  @override
-  _i7.Future<_i4.Release> createRelease(
-          _i4.RepositorySlug? slug, _i4.CreateRelease? createRelease,
-          {bool? getIfExists = true}) =>
-      (super.noSuchMethod(Invocation.method(#createRelease, [slug, createRelease], {#getIfExists: getIfExists}),
-              returnValue: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-                  this,
-                  Invocation.method(#createRelease, [slug, createRelease],
-                      {#getIfExists: getIfExists}))),
-              returnValueForMissingStub:
-                  _i7.Future<_i4.Release>.value(_FakeRelease_32(this, Invocation.method(#createRelease, [slug, createRelease], {#getIfExists: getIfExists}))))
-          as _i7.Future<_i4.Release>);
-  @override
-  _i7.Future<_i4.Release> editRelease(
-          _i4.RepositorySlug? slug, _i4.Release? releaseToEdit,
-          {String? tagName,
-          String? targetCommitish,
-          String? name,
-          String? body,
-          bool? draft,
-          bool? preRelease}) =>
-      (super.noSuchMethod(
-          Invocation.method(#editRelease, [
+        Invocation.method(
+          #testPushHook,
+          [
             slug,
-            releaseToEdit
-          ], {
+            id,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<bool> pingHook(
+    _i3.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #pingHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<bool> deleteHook(
+    _i3.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteHook,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Stream<_i3.PublicKey> listDeployKeys(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listDeployKeys,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.PublicKey>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.PublicKey>.empty(),
+      ) as _i5.Stream<_i3.PublicKey>);
+
+  @override
+  _i5.Future<_i3.PublicKey> getDeployKey(
+    _i3.RepositorySlug? slug, {
+    required int? id,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getDeployKey,
+          [slug],
+          {#id: id},
+        ),
+        returnValue: _i5.Future<_i3.PublicKey>.value(_FakePublicKey_32(
+          this,
+          Invocation.method(
+            #getDeployKey,
+            [slug],
+            {#id: id},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.PublicKey>.value(_FakePublicKey_32(
+          this,
+          Invocation.method(
+            #getDeployKey,
+            [slug],
+            {#id: id},
+          ),
+        )),
+      ) as _i5.Future<_i3.PublicKey>);
+
+  @override
+  _i5.Future<_i3.PublicKey> createDeployKey(
+    _i3.RepositorySlug? slug,
+    _i3.CreatePublicKey? key,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createDeployKey,
+          [
+            slug,
+            key,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.PublicKey>.value(_FakePublicKey_32(
+          this,
+          Invocation.method(
+            #createDeployKey,
+            [
+              slug,
+              key,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.PublicKey>.value(_FakePublicKey_32(
+          this,
+          Invocation.method(
+            #createDeployKey,
+            [
+              slug,
+              key,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.PublicKey>);
+
+  @override
+  _i5.Future<bool> deleteDeployKey({
+    required _i3.RepositorySlug? slug,
+    required _i3.PublicKey? key,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteDeployKey,
+          [],
+          {
+            #slug: slug,
+            #key: key,
+          },
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<_i3.RepositoryCommit> merge(
+    _i3.RepositorySlug? slug,
+    _i3.CreateMerge? merge,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #merge,
+          [
+            slug,
+            merge,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.RepositoryCommit>.value(_FakeRepositoryCommit_26(
+          this,
+          Invocation.method(
+            #merge,
+            [
+              slug,
+              merge,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.RepositoryCommit>.value(_FakeRepositoryCommit_26(
+          this,
+          Invocation.method(
+            #merge,
+            [
+              slug,
+              merge,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.RepositoryCommit>);
+
+  @override
+  _i5.Future<_i3.RepositoryPages> getPagesInfo(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getPagesInfo,
+          [slug],
+        ),
+        returnValue:
+            _i5.Future<_i3.RepositoryPages>.value(_FakeRepositoryPages_33(
+          this,
+          Invocation.method(
+            #getPagesInfo,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.RepositoryPages>.value(_FakeRepositoryPages_33(
+          this,
+          Invocation.method(
+            #getPagesInfo,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.RepositoryPages>);
+
+  @override
+  _i5.Stream<_i3.PageBuild> listPagesBuilds(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listPagesBuilds,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.PageBuild>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.PageBuild>.empty(),
+      ) as _i5.Stream<_i3.PageBuild>);
+
+  @override
+  _i5.Future<_i3.PageBuild> getLatestPagesBuild(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getLatestPagesBuild,
+          [slug],
+        ),
+        returnValue: _i5.Future<_i3.PageBuild>.value(_FakePageBuild_34(
+          this,
+          Invocation.method(
+            #getLatestPagesBuild,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.PageBuild>.value(_FakePageBuild_34(
+          this,
+          Invocation.method(
+            #getLatestPagesBuild,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.PageBuild>);
+
+  @override
+  _i5.Stream<_i3.Release> listReleases(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReleases,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.Release>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.Release>.empty(),
+      ) as _i5.Stream<_i3.Release>);
+
+  @override
+  _i5.Future<_i3.Release> getLatestRelease(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getLatestRelease,
+          [slug],
+        ),
+        returnValue: _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getLatestRelease,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getLatestRelease,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.Release>);
+
+  @override
+  _i5.Future<_i3.Release> getReleaseById(
+    _i3.RepositorySlug? slug,
+    int? id,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseById,
+          [
+            slug,
+            id,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getReleaseById,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getReleaseById,
+            [
+              slug,
+              id,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Release>);
+
+  @override
+  _i5.Future<_i3.Release> getReleaseByTagName(
+    _i3.RepositorySlug? slug,
+    String? tagName,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseByTagName,
+          [
+            slug,
+            tagName,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getReleaseByTagName,
+            [
+              slug,
+              tagName,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #getReleaseByTagName,
+            [
+              slug,
+              tagName,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.Release>);
+
+  @override
+  _i5.Future<_i3.Release> createRelease(
+    _i3.RepositorySlug? slug,
+    _i3.CreateRelease? createRelease, {
+    bool? getIfExists = true,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createRelease,
+          [
+            slug,
+            createRelease,
+          ],
+          {#getIfExists: getIfExists},
+        ),
+        returnValue: _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #createRelease,
+            [
+              slug,
+              createRelease,
+            ],
+            {#getIfExists: getIfExists},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #createRelease,
+            [
+              slug,
+              createRelease,
+            ],
+            {#getIfExists: getIfExists},
+          ),
+        )),
+      ) as _i5.Future<_i3.Release>);
+
+  @override
+  _i5.Future<_i3.Release> editRelease(
+    _i3.RepositorySlug? slug,
+    _i3.Release? releaseToEdit, {
+    String? tagName,
+    String? targetCommitish,
+    String? name,
+    String? body,
+    bool? draft,
+    bool? preRelease,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editRelease,
+          [
+            slug,
+            releaseToEdit,
+          ],
+          {
             #tagName: tagName,
             #targetCommitish: targetCommitish,
             #name: name,
             #body: body,
             #draft: draft,
-            #preRelease: preRelease
-          }),
-          returnValue: _i7.Future<_i4.Release>.value(_FakeRelease_32(
-              this,
-              Invocation.method(#editRelease, [
-                slug,
-                releaseToEdit
-              ], {
-                #tagName: tagName,
-                #targetCommitish: targetCommitish,
-                #name: name,
-                #body: body,
-                #draft: draft,
-                #preRelease: preRelease
-              }))),
-          returnValueForMissingStub:
-              _i7.Future<_i4.Release>.value(_FakeRelease_32(
-                  this,
-                  Invocation.method(#editRelease, [
-                    slug,
-                    releaseToEdit
-                  ], {
-                    #tagName: tagName,
-                    #targetCommitish: targetCommitish,
-                    #name: name,
-                    #body: body,
-                    #draft: draft,
-                    #preRelease: preRelease
-                  })))) as _i7.Future<_i4.Release>);
-  @override
-  _i7.Future<bool> deleteRelease(
-          _i4.RepositorySlug? slug, _i4.Release? release) =>
-      (super.noSuchMethod(Invocation.method(#deleteRelease, [slug, release]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Stream<_i4.ReleaseAsset> listReleaseAssets(
-          _i4.RepositorySlug? slug, _i4.Release? release) =>
-      (super.noSuchMethod(
-              Invocation.method(#listReleaseAssets, [slug, release]),
-              returnValue: _i7.Stream<_i4.ReleaseAsset>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.ReleaseAsset>.empty())
-          as _i7.Stream<_i4.ReleaseAsset>);
-  @override
-  _i7.Future<_i4.ReleaseAsset> getReleaseAsset(
-          _i4.RepositorySlug? slug, _i4.Release? release, {int? assetId}) =>
-      (super.noSuchMethod(Invocation.method(#getReleaseAsset, [slug, release], {#assetId: assetId}),
-              returnValue: _i7.Future<_i4.ReleaseAsset>.value(_FakeReleaseAsset_33(
-                  this,
-                  Invocation.method(
-                      #getReleaseAsset, [slug, release], {#assetId: assetId}))),
-              returnValueForMissingStub: _i7.Future<_i4.ReleaseAsset>.value(
-                  _FakeReleaseAsset_33(this, Invocation.method(#getReleaseAsset, [slug, release], {#assetId: assetId}))))
-          as _i7.Future<_i4.ReleaseAsset>);
-  @override
-  _i7.Future<_i4.ReleaseAsset> editReleaseAsset(
-          _i4.RepositorySlug? slug, _i4.ReleaseAsset? assetToEdit,
-          {String? name, String? label}) =>
-      (super.noSuchMethod(Invocation.method(#editReleaseAsset, [slug, assetToEdit], {#name: name, #label: label}),
-              returnValue: _i7.Future<_i4.ReleaseAsset>.value(_FakeReleaseAsset_33(
-                  this,
-                  Invocation.method(#editReleaseAsset, [slug, assetToEdit],
-                      {#name: name, #label: label}))),
-              returnValueForMissingStub:
-                  _i7.Future<_i4.ReleaseAsset>.value(_FakeReleaseAsset_33(this, Invocation.method(#editReleaseAsset, [slug, assetToEdit], {#name: name, #label: label}))))
-          as _i7.Future<_i4.ReleaseAsset>);
-  @override
-  _i7.Future<bool> deleteReleaseAsset(
-          _i4.RepositorySlug? slug, _i4.ReleaseAsset? asset) =>
-      (super.noSuchMethod(Invocation.method(#deleteReleaseAsset, [slug, asset]),
-              returnValue: _i7.Future<bool>.value(false),
-              returnValueForMissingStub: _i7.Future<bool>.value(false))
-          as _i7.Future<bool>);
-  @override
-  _i7.Future<List<_i4.ReleaseAsset>> uploadReleaseAssets(_i4.Release? release,
-          Iterable<_i4.CreateReleaseAsset>? createReleaseAssets) =>
-      (super.noSuchMethod(
+            #preRelease: preRelease,
+          },
+        ),
+        returnValue: _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
           Invocation.method(
-              #uploadReleaseAssets, [release, createReleaseAssets]),
-          returnValue:
-              _i7.Future<List<_i4.ReleaseAsset>>.value(<_i4.ReleaseAsset>[]),
-          returnValueForMissingStub: _i7.Future<List<_i4.ReleaseAsset>>.value(
-              <_i4.ReleaseAsset>[])) as _i7.Future<List<_i4.ReleaseAsset>>);
+            #editRelease,
+            [
+              slug,
+              releaseToEdit,
+            ],
+            {
+              #tagName: tagName,
+              #targetCommitish: targetCommitish,
+              #name: name,
+              #body: body,
+              #draft: draft,
+              #preRelease: preRelease,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.Release>.value(_FakeRelease_35(
+          this,
+          Invocation.method(
+            #editRelease,
+            [
+              slug,
+              releaseToEdit,
+            ],
+            {
+              #tagName: tagName,
+              #targetCommitish: targetCommitish,
+              #name: name,
+              #body: body,
+              #draft: draft,
+              #preRelease: preRelease,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.Release>);
+
   @override
-  _i7.Future<List<_i4.ContributorStatistics>> listContributorStats(
-          _i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listContributorStats, [slug]),
-              returnValue: _i7.Future<List<_i4.ContributorStatistics>>.value(
-                  <_i4.ContributorStatistics>[]),
-              returnValueForMissingStub:
-                  _i7.Future<List<_i4.ContributorStatistics>>.value(
-                      <_i4.ContributorStatistics>[]))
-          as _i7.Future<List<_i4.ContributorStatistics>>);
-  @override
-  _i7.Stream<_i4.YearCommitCountWeek> listCommitActivity(
-          _i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCommitActivity, [slug]),
-              returnValue: _i7.Stream<_i4.YearCommitCountWeek>.empty(),
-              returnValueForMissingStub:
-                  _i7.Stream<_i4.YearCommitCountWeek>.empty())
-          as _i7.Stream<_i4.YearCommitCountWeek>);
-  @override
-  _i7.Stream<_i4.WeeklyChangesCount> listCodeFrequency(
-          _i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listCodeFrequency, [slug]),
-              returnValue: _i7.Stream<_i4.WeeklyChangesCount>.empty(),
-              returnValueForMissingStub:
-                  _i7.Stream<_i4.WeeklyChangesCount>.empty())
-          as _i7.Stream<_i4.WeeklyChangesCount>);
-  @override
-  _i7.Future<_i4.ContributorParticipation> getParticipation(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#getParticipation, [slug]),
-              returnValue: _i7.Future<_i4.ContributorParticipation>.value(
-                  _FakeContributorParticipation_34(
-                      this, Invocation.method(#getParticipation, [slug]))),
-              returnValueForMissingStub: _i7.Future<_i4.ContributorParticipation>.value(
-                  _FakeContributorParticipation_34(
-                      this, Invocation.method(#getParticipation, [slug]))))
-          as _i7.Future<_i4.ContributorParticipation>);
-  @override
-  _i7.Stream<_i4.PunchcardEntry> listPunchcard(_i4.RepositorySlug? slug) =>
-      (super.noSuchMethod(Invocation.method(#listPunchcard, [slug]),
-              returnValue: _i7.Stream<_i4.PunchcardEntry>.empty(),
-              returnValueForMissingStub: _i7.Stream<_i4.PunchcardEntry>.empty())
-          as _i7.Stream<_i4.PunchcardEntry>);
-  @override
-  _i7.Stream<_i4.RepositoryStatus> listStatuses(
-          _i4.RepositorySlug? slug, String? ref) =>
-      (super.noSuchMethod(Invocation.method(#listStatuses, [slug, ref]),
-              returnValue: _i7.Stream<_i4.RepositoryStatus>.empty(),
-              returnValueForMissingStub:
-                  _i7.Stream<_i4.RepositoryStatus>.empty())
-          as _i7.Stream<_i4.RepositoryStatus>);
-  @override
-  _i7.Future<_i4.RepositoryStatus> createStatus(
-          _i4.RepositorySlug? slug, String? ref, _i4.CreateStatus? request) =>
+  _i5.Future<bool> deleteRelease(
+    _i3.RepositorySlug? slug,
+    _i3.Release? release,
+  ) =>
       (super.noSuchMethod(
-              Invocation.method(#createStatus, [slug, ref, request]),
-              returnValue: _i7.Future<_i4.RepositoryStatus>.value(
-                  _FakeRepositoryStatus_35(this,
-                      Invocation.method(#createStatus, [slug, ref, request]))),
-              returnValueForMissingStub: _i7.Future<_i4.RepositoryStatus>.value(
-                  _FakeRepositoryStatus_35(this, Invocation.method(#createStatus, [slug, ref, request]))))
-          as _i7.Future<_i4.RepositoryStatus>);
+        Invocation.method(
+          #deleteRelease,
+          [
+            slug,
+            release,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
   @override
-  _i7.Future<_i4.CombinedRepositoryStatus> getCombinedStatus(
-          _i4.RepositorySlug? slug, String? ref) =>
-      (super.noSuchMethod(Invocation.method(#getCombinedStatus, [slug, ref]),
-              returnValue: _i7.Future<_i4.CombinedRepositoryStatus>.value(
-                  _FakeCombinedRepositoryStatus_36(this,
-                      Invocation.method(#getCombinedStatus, [slug, ref]))),
-              returnValueForMissingStub:
-                  _i7.Future<_i4.CombinedRepositoryStatus>.value(
-                      _FakeCombinedRepositoryStatus_36(this, Invocation.method(#getCombinedStatus, [slug, ref]))))
-          as _i7.Future<_i4.CombinedRepositoryStatus>);
+  _i5.Stream<_i3.ReleaseAsset> listReleaseAssets(
+    _i3.RepositorySlug? slug,
+    _i3.Release? release,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listReleaseAssets,
+          [
+            slug,
+            release,
+          ],
+        ),
+        returnValue: _i5.Stream<_i3.ReleaseAsset>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.ReleaseAsset>.empty(),
+      ) as _i5.Stream<_i3.ReleaseAsset>);
+
   @override
-  _i7.Future<_i4.ReleaseNotes> generateReleaseNotes(
-          _i4.CreateReleaseNotes? crn) =>
-      (super.noSuchMethod(Invocation.method(#generateReleaseNotes, [crn]),
-              returnValue: _i7.Future<_i4.ReleaseNotes>.value(
-                  _FakeReleaseNotes_37(
-                      this, Invocation.method(#generateReleaseNotes, [crn]))),
-              returnValueForMissingStub: _i7.Future<_i4.ReleaseNotes>.value(
-                  _FakeReleaseNotes_37(
-                      this, Invocation.method(#generateReleaseNotes, [crn]))))
-          as _i7.Future<_i4.ReleaseNotes>);
+  _i5.Future<_i3.ReleaseAsset> getReleaseAsset(
+    _i3.RepositorySlug? slug,
+    _i3.Release? release, {
+    required int? assetId,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getReleaseAsset,
+          [
+            slug,
+            release,
+          ],
+          {#assetId: assetId},
+        ),
+        returnValue: _i5.Future<_i3.ReleaseAsset>.value(_FakeReleaseAsset_36(
+          this,
+          Invocation.method(
+            #getReleaseAsset,
+            [
+              slug,
+              release,
+            ],
+            {#assetId: assetId},
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ReleaseAsset>.value(_FakeReleaseAsset_36(
+          this,
+          Invocation.method(
+            #getReleaseAsset,
+            [
+              slug,
+              release,
+            ],
+            {#assetId: assetId},
+          ),
+        )),
+      ) as _i5.Future<_i3.ReleaseAsset>);
+
+  @override
+  _i5.Future<_i3.ReleaseAsset> editReleaseAsset(
+    _i3.RepositorySlug? slug,
+    _i3.ReleaseAsset? assetToEdit, {
+    String? name,
+    String? label,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #editReleaseAsset,
+          [
+            slug,
+            assetToEdit,
+          ],
+          {
+            #name: name,
+            #label: label,
+          },
+        ),
+        returnValue: _i5.Future<_i3.ReleaseAsset>.value(_FakeReleaseAsset_36(
+          this,
+          Invocation.method(
+            #editReleaseAsset,
+            [
+              slug,
+              assetToEdit,
+            ],
+            {
+              #name: name,
+              #label: label,
+            },
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ReleaseAsset>.value(_FakeReleaseAsset_36(
+          this,
+          Invocation.method(
+            #editReleaseAsset,
+            [
+              slug,
+              assetToEdit,
+            ],
+            {
+              #name: name,
+              #label: label,
+            },
+          ),
+        )),
+      ) as _i5.Future<_i3.ReleaseAsset>);
+
+  @override
+  _i5.Future<bool> deleteReleaseAsset(
+    _i3.RepositorySlug? slug,
+    _i3.ReleaseAsset? asset,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #deleteReleaseAsset,
+          [
+            slug,
+            asset,
+          ],
+        ),
+        returnValue: _i5.Future<bool>.value(false),
+        returnValueForMissingStub: _i5.Future<bool>.value(false),
+      ) as _i5.Future<bool>);
+
+  @override
+  _i5.Future<List<_i3.ReleaseAsset>> uploadReleaseAssets(
+    _i3.Release? release,
+    Iterable<_i3.CreateReleaseAsset>? createReleaseAssets,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #uploadReleaseAssets,
+          [
+            release,
+            createReleaseAssets,
+          ],
+        ),
+        returnValue:
+            _i5.Future<List<_i3.ReleaseAsset>>.value(<_i3.ReleaseAsset>[]),
+        returnValueForMissingStub:
+            _i5.Future<List<_i3.ReleaseAsset>>.value(<_i3.ReleaseAsset>[]),
+      ) as _i5.Future<List<_i3.ReleaseAsset>>);
+
+  @override
+  _i5.Future<List<_i3.ContributorStatistics>> listContributorStats(
+          _i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listContributorStats,
+          [slug],
+        ),
+        returnValue: _i5.Future<List<_i3.ContributorStatistics>>.value(
+            <_i3.ContributorStatistics>[]),
+        returnValueForMissingStub:
+            _i5.Future<List<_i3.ContributorStatistics>>.value(
+                <_i3.ContributorStatistics>[]),
+      ) as _i5.Future<List<_i3.ContributorStatistics>>);
+
+  @override
+  _i5.Stream<_i3.YearCommitCountWeek> listCommitActivity(
+          _i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCommitActivity,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.YearCommitCountWeek>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.YearCommitCountWeek>.empty(),
+      ) as _i5.Stream<_i3.YearCommitCountWeek>);
+
+  @override
+  _i5.Stream<_i3.WeeklyChangesCount> listCodeFrequency(
+          _i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listCodeFrequency,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.WeeklyChangesCount>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.WeeklyChangesCount>.empty(),
+      ) as _i5.Stream<_i3.WeeklyChangesCount>);
+
+  @override
+  _i5.Future<_i3.ContributorParticipation> getParticipation(
+          _i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getParticipation,
+          [slug],
+        ),
+        returnValue: _i5.Future<_i3.ContributorParticipation>.value(
+            _FakeContributorParticipation_37(
+          this,
+          Invocation.method(
+            #getParticipation,
+            [slug],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ContributorParticipation>.value(
+                _FakeContributorParticipation_37(
+          this,
+          Invocation.method(
+            #getParticipation,
+            [slug],
+          ),
+        )),
+      ) as _i5.Future<_i3.ContributorParticipation>);
+
+  @override
+  _i5.Stream<_i3.PunchcardEntry> listPunchcard(_i3.RepositorySlug? slug) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listPunchcard,
+          [slug],
+        ),
+        returnValue: _i5.Stream<_i3.PunchcardEntry>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.PunchcardEntry>.empty(),
+      ) as _i5.Stream<_i3.PunchcardEntry>);
+
+  @override
+  _i5.Stream<_i3.RepositoryStatus> listStatuses(
+    _i3.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #listStatuses,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i5.Stream<_i3.RepositoryStatus>.empty(),
+        returnValueForMissingStub: _i5.Stream<_i3.RepositoryStatus>.empty(),
+      ) as _i5.Stream<_i3.RepositoryStatus>);
+
+  @override
+  _i5.Future<_i3.RepositoryStatus> createStatus(
+    _i3.RepositorySlug? slug,
+    String? ref,
+    _i3.CreateStatus? request,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createStatus,
+          [
+            slug,
+            ref,
+            request,
+          ],
+        ),
+        returnValue:
+            _i5.Future<_i3.RepositoryStatus>.value(_FakeRepositoryStatus_38(
+          this,
+          Invocation.method(
+            #createStatus,
+            [
+              slug,
+              ref,
+              request,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.RepositoryStatus>.value(_FakeRepositoryStatus_38(
+          this,
+          Invocation.method(
+            #createStatus,
+            [
+              slug,
+              ref,
+              request,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.RepositoryStatus>);
+
+  @override
+  _i5.Future<_i3.CombinedRepositoryStatus> getCombinedStatus(
+    _i3.RepositorySlug? slug,
+    String? ref,
+  ) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #getCombinedStatus,
+          [
+            slug,
+            ref,
+          ],
+        ),
+        returnValue: _i5.Future<_i3.CombinedRepositoryStatus>.value(
+            _FakeCombinedRepositoryStatus_39(
+          this,
+          Invocation.method(
+            #getCombinedStatus,
+            [
+              slug,
+              ref,
+            ],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.CombinedRepositoryStatus>.value(
+                _FakeCombinedRepositoryStatus_39(
+          this,
+          Invocation.method(
+            #getCombinedStatus,
+            [
+              slug,
+              ref,
+            ],
+          ),
+        )),
+      ) as _i5.Future<_i3.CombinedRepositoryStatus>);
+
+  @override
+  _i5.Future<_i3.ReleaseNotes> generateReleaseNotes(
+          _i3.CreateReleaseNotes? crn) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #generateReleaseNotes,
+          [crn],
+        ),
+        returnValue: _i5.Future<_i3.ReleaseNotes>.value(_FakeReleaseNotes_40(
+          this,
+          Invocation.method(
+            #generateReleaseNotes,
+            [crn],
+          ),
+        )),
+        returnValueForMissingStub:
+            _i5.Future<_i3.ReleaseNotes>.value(_FakeReleaseNotes_40(
+          this,
+          Invocation.method(
+            #generateReleaseNotes,
+            [crn],
+          ),
+        )),
+      ) as _i5.Future<_i3.ReleaseNotes>);
 }
 
 /// A class which mocks [RepositoryCommit].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockRepositoryCommit extends _i1.Mock implements _i4.RepositoryCommit {
+class MockRepositoryCommit extends _i1.Mock implements _i3.RepositoryCommit {
   @override
-  set url(String? _url) => super.noSuchMethod(Invocation.setter(#url, _url),
-      returnValueForMissingStub: null);
+  set url(String? _url) => super.noSuchMethod(
+        Invocation.setter(
+          #url,
+          _url,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set sha(String? _sha) => super.noSuchMethod(Invocation.setter(#sha, _sha),
-      returnValueForMissingStub: null);
+  set sha(String? _sha) => super.noSuchMethod(
+        Invocation.setter(
+          #sha,
+          _sha,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set htmlUrl(String? _htmlUrl) =>
-      super.noSuchMethod(Invocation.setter(#htmlUrl, _htmlUrl),
-          returnValueForMissingStub: null);
+  set htmlUrl(String? _htmlUrl) => super.noSuchMethod(
+        Invocation.setter(
+          #htmlUrl,
+          _htmlUrl,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set commentsUrl(String? _commentsUrl) =>
-      super.noSuchMethod(Invocation.setter(#commentsUrl, _commentsUrl),
-          returnValueForMissingStub: null);
+  set commentsUrl(String? _commentsUrl) => super.noSuchMethod(
+        Invocation.setter(
+          #commentsUrl,
+          _commentsUrl,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set commit(_i4.GitCommit? _commit) =>
-      super.noSuchMethod(Invocation.setter(#commit, _commit),
-          returnValueForMissingStub: null);
+  set commit(_i3.GitCommit? _commit) => super.noSuchMethod(
+        Invocation.setter(
+          #commit,
+          _commit,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set author(_i4.User? _author) =>
-      super.noSuchMethod(Invocation.setter(#author, _author),
-          returnValueForMissingStub: null);
+  set author(_i3.User? _author) => super.noSuchMethod(
+        Invocation.setter(
+          #author,
+          _author,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set committer(_i4.User? _committer) =>
-      super.noSuchMethod(Invocation.setter(#committer, _committer),
-          returnValueForMissingStub: null);
+  set committer(_i3.User? _committer) => super.noSuchMethod(
+        Invocation.setter(
+          #committer,
+          _committer,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set parents(List<_i4.GitCommit>? _parents) =>
-      super.noSuchMethod(Invocation.setter(#parents, _parents),
-          returnValueForMissingStub: null);
+  set parents(List<_i3.GitCommit>? _parents) => super.noSuchMethod(
+        Invocation.setter(
+          #parents,
+          _parents,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set stats(_i4.CommitStats? _stats) =>
-      super.noSuchMethod(Invocation.setter(#stats, _stats),
-          returnValueForMissingStub: null);
+  set stats(_i3.CommitStats? _stats) => super.noSuchMethod(
+        Invocation.setter(
+          #stats,
+          _stats,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
-  set files(List<_i4.CommitFile>? _files) =>
-      super.noSuchMethod(Invocation.setter(#files, _files),
-          returnValueForMissingStub: null);
+  set files(List<_i3.CommitFile>? _files) => super.noSuchMethod(
+        Invocation.setter(
+          #files,
+          _files,
+        ),
+        returnValueForMissingStub: null,
+      );
+
   @override
   Map<String, dynamic> toJson() => (super.noSuchMethod(
-      Invocation.method(#toJson, []),
-      returnValue: <String, dynamic>{},
-      returnValueForMissingStub: <String, dynamic>{}) as Map<String, dynamic>);
+        Invocation.method(
+          #toJson,
+          [],
+        ),
+        returnValue: <String, dynamic>{},
+        returnValueForMissingStub: <String, dynamic>{},
+      ) as Map<String, dynamic>);
 }